2011-12-09 12 views
1

. Проверка defined?(JRUBY_VERSION) представляется наиболее распространенным способом определения того, насколько вы работаете в jruby (c.f. How can I tell if I'm running from JRuby vs. Ruby?, различные проекты FOSS jruby). Есть ли аналогичная идиома для определения того, работаете ли вы в Tomcat?Есть ли ирония jruby-on-rails для обнаружения, если вы работаете в Tomcat?

ответ

0

Может быть что-то вроде:

public boolean isTomcat() { 
    try { 
     Class.forName("org.apache.tomcat.InstanceManager"); 
     return true; 
    } catch (ClassNotFoundException ex) { 
    return false; 
    } 
} 
+0

Это не выглядит так же, как идиомы. Я подозреваю, что есть что-то краткое, что будет работать как в jruby, так и в реализации ванильного рубина. И, вероятно, что-то использует тот же «определенный? SOME_CONSTANT» шаблон. – Araxia

2

В отсутствии существующих четко установленные идиом, я собираюсь предложить defined?($servlet_context). Это будет определено в любом контейнере сервлетов, а не только Tomcat в частности, но это может быть предпочтительным в любом случае.

+0

Что касается вашего ответа и последующего флага [здесь] (http://stackoverflow.com/questions/8337804/is-there-a-way-to-debug-a-jruby-on-rails-application-running-on-a -tomcat-server/8483552 # 8483552), вы просто удалили его. Он не будет доступен никому, кроме вас, модераторов и пользователей 10k. Это так же хорошо, как и получается; SO действительно не удаляет контент, если в нем нет ничего плохого. – NullUserException

0

работает в обоих MRI и JRuby

IN_TOMCAT = begin 
    require 'org/apache/tomcat/InstanceManager' 
    defined?(Java::org::apache::tomcat::InstanceManager) 
rescue LoadError;end