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的陷阱运行时常量的方法?
使用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)
您还可以使用eval_gemfile:
gemfiles = [ 'Gemfile.global' ]
gemfiles.each do |gemfile|
eval_gemfile gemfile
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
533 次 |
| 最近记录: |