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