根据Gemfile指定的平台配置Rails初始化程序(Ruby,jRruby ..)

时间:2014-05-04 13:38:24

标签: ruby-on-rails jruby

我目前在我的Gemfile中指定的rails应用程序上使用Ruby和jRuby:

platform :mri do
  # MRI gems here.
end

platform :jruby do
  # jRuby gems here.
end

我的jRuby块上只有两个宝石,所以大多数初始化器(配置/初始化器)都是针对MRI的。有没有办法可以使这些初始化程序平台特定,而无需转到每个文件并根据平台有条件地加载它?

1 个答案:

答案 0 :(得分:1)

首先,你应该期望共享大多数初始化程序:) ...但如果你真的想要这个你需要自己实现它,通常最简单的方法是区分你是否在初始化程序中使用JRuby(或者任何地方)其他):

unless defined? JRUBY_VERSION
  # on MRI
end

它可能更清洁(假设宝石得到Bundler自动需要)来定义? const_defined?在配置Gem之前检查初始化程序,例如:

if defined? Sample
  # assuming gem 'sample' defines a Sample constant
end

如果所有这些都不够,你可以进行一个元初始化,加载基于平台的其他初始化器(我可能不会这样做)......某事:

if defined? JRUBY_VERSION
  # glob, sort and load all files from initializers/mri/*.rb
else
  # glob, sort and load all files from initializers/jruby/*.rb
end