我目前在我的Gemfile中指定的rails应用程序上使用Ruby和jRuby:
platform :mri do
# MRI gems here.
end
platform :jruby do
# jRuby gems here.
end
我的jRuby块上只有两个宝石,所以大多数初始化器(配置/初始化器)都是针对MRI的。有没有办法可以使这些初始化程序平台特定,而无需转到每个文件并根据平台有条件地加载它?
答案 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