Rails:我的应用程序如何判断它是在MRI还是JRuby中运行?
在之前的一个问题中 ,我问过如何告诉我的Gemfile是否采用JRuby相关的gem或MRI相关的gem。 我得到的答案是在Gemfile中执行以下操作:
platforms :jruby do gem "activerecord-jdbcsqlite3-adapter" end platforms :mri do gem "sqlite3" end
显然,Bundler中的platforms()方法知道如何判断我是在运行MRI还是JRuby。 如果我正在运行JRuby或MRI,我可以在我的程序中告诉另一种方式吗?
你能够像这样区分这两者:
case (RUBY_ENGINE) when 'ruby' # ... when 'jruby' # ... end
你可以写一个方法给你一个jruby?
方法如果需要:
def jruby? RUBY_ENGINE == 'jruby' end
您可以使用rbconfig
有关当前ruby解释器的全面信息
require `rbconfig` require `yaml` #optional irb(main):011:0> y Config::CONFIG --- DESTDIR: "C:" MAJOR: "1" MINOR: "9" TEENY: "1" PATCHLEVEL: "180" INSTALL: /usr/bin/install -c EXEEXT: .exe prefix: C:/Ruby192 ruby_install_name: ruby RUBY_INSTALL_NAME: ruby RUBY_SO_NAME: msvcrt-ruby191 PACKAGE: ruby ...
使用Ruby 2.2.3 Config::CONFIG
给我NameError: uninitialized constant Config
,但以下工作原理:
y RbConfig::CONFIG