我将一个大型应用程序拆分成多个较小的应用程序。在这样做的时候,我意识到通过创建一个Gemfile.global并将其包含在我的主应用程序和子应用程序中,我可以清理所有的Gemfile,例如,我所有的部署gem都放在主Gemfile中,而我的rails放在Gemfile.global中。
它几乎适用于我所有的gem,除了一个: Squeel。
我在根应用程序中的Gemfile开头是:
gemfiles = [
File.join('Gemfile.global'),
]
Dir.glob(File.join(File.dirname(__FILE__), gemfiles)) do |gemfile|
eval(IO.read(gemfile), binding)
end
# gem 'squeel' # Let's try putting this in Gemfile.global我的Gemfile.global看起来像这样:
source 'https://rubygems.org'
# rails and dependencies
gem 'squeel'bundle install工作得很好,就像rails s和几乎所有的东西一样,正如你所期望的那样,在主Gemfile中使用Squeel。然而,当使用默认的screws初始化器时,将它放在Gemfile.global中会搞砸初始化过程:
Squeel.configure do |config|
end即使bundle install报告Using squeel (1.0.13),rails s也会抛出uninitialized constant Squeel (NameError)。为什么这种编写Gemfile的方法会弄乱rails运行时常量?
发布于 2013-05-20 04:33:50
在将Gemfile.global加载到Gemfile中时,请使用instance_eval而不是eval。例如,您的项目Gemfile应如下所示(删除File.joins以避免混淆):
gemfiles = [ 'Gemfile.global' ]
gemfiles.each do |gemfile|
instance_eval File.read(gemfile)
end发布于 2015-08-29 03:18:24
您也可以使用eval_gemfile
gemfiles = [ 'Gemfile.global' ]
gemfiles.each do |gemfile|
eval_gemfile gemfile
endhttps://stackoverflow.com/questions/13783801
复制相似问题