. Проверка 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?
ответ
Может быть что-то вроде:
public boolean isTomcat() {
try {
Class.forName("org.apache.tomcat.InstanceManager");
return true;
} catch (ClassNotFoundException ex) {
return false;
}
}
В отсутствии существующих четко установленные идиом, я собираюсь предложить defined?($servlet_context)
. Это будет определено в любом контейнере сервлетов, а не только Tomcat в частности, но это может быть предпочтительным в любом случае.
Что касается вашего ответа и последующего флага [здесь] (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
работает в обоих MRI и JRuby
IN_TOMCAT = begin
require 'org/apache/tomcat/InstanceManager'
defined?(Java::org::apache::tomcat::InstanceManager)
rescue LoadError;end
Это не выглядит так же, как идиомы. Я подозреваю, что есть что-то краткое, что будет работать как в jruby, так и в реализации ванильного рубина. И, вероятно, что-то использует тот же «определенный? SOME_CONSTANT» шаблон. – Araxia