从多个其他人组成一个Gemfile

Chr*_*ele 3 gem rubygems ruby-on-rails squeel gemfile

我正在将一个大型应用程序拆分成多个较小的应用程序.在这样做的时候,我意识到通过Gemfile.global在我的主应用程序和子应用程序中创建并包含它,我可以清理我Gemfile的所有内容.例如,我的所有部署宝石都在主要部分Gemfile,而我的导轨进入了Gemfile.global.

它几乎适用于我的所有宝石,除了一个: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
Run Code Online (Sandbox Code Playgroud)

Gemfile.global看起来像:

source 'https://rubygems.org'
# rails and dependencies
gem 'squeel'
Run Code Online (Sandbox Code Playgroud)

bundle installrails sSqueel在主要方面表现出色,以及几乎所有东西,你期望的方式Gemfile.Gemfile.global但是,在使用默认的Squeel初始值设定项时,将其置于初始化过程中:

Squeel.configure do |config|
end
Run Code Online (Sandbox Code Playgroud)

rails suninitialized constant Squeel (NameError)即使bundle install报道,也会抛出一个Using squeel (1.0.13).为什么这个组合我Gemfile的陷阱运行时常量的方法?

Sub*_*has 7

使用instance_eval而不是eval将Gemfile.global加载到Gemfile中.即您的项目Gemfile应如下所示(删除File.joins以避免混淆):

gemfiles = [ 'Gemfile.global' ]
gemfiles.each do |gemfile|
  instance_eval File.read(gemfile)
end
Run Code Online (Sandbox Code Playgroud)


kro*_*oss 5

您还可以使用eval_gemfile:

gemfiles = [ 'Gemfile.global' ]
gemfiles.each do |gemfile|
  eval_gemfile gemfile
end
Run Code Online (Sandbox Code Playgroud)