首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从多个Gemfile组成一个Gemfile

从多个Gemfile组成一个Gemfile
EN

Stack Overflow用户
提问于 2012-12-09 09:30:04
回答 2查看 706关注 0票数 3

我将一个大型应用程序拆分成多个较小的应用程序。在这样做的时候,我意识到通过创建一个Gemfile.global并将其包含在我的主应用程序和子应用程序中,我可以清理所有的Gemfile,例如,我所有的部署gem都放在主Gemfile中,而我的rails放在Gemfile.global中。

它几乎适用于我所有的gem,除了一个: Squeel。

我在根应用程序中的Gemfile开头是:

代码语言:javascript
复制
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看起来像这样:

代码语言:javascript
复制
source 'https://rubygems.org'
# rails and dependencies
gem 'squeel'

bundle install工作得很好,就像rails s和几乎所有的东西一样,正如你所期望的那样,在主Gemfile中使用Squeel。然而,当使用默认的screws初始化器时,将它放在Gemfile.global中会搞砸初始化过程:

代码语言:javascript
复制
Squeel.configure do |config|
end

即使bundle install报告Using squeel (1.0.13)rails s也会抛出uninitialized constant Squeel (NameError)。为什么这种编写Gemfile的方法会弄乱rails运行时常量?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-20 04:33:50

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

代码语言:javascript
复制
gemfiles = [ 'Gemfile.global' ]
gemfiles.each do |gemfile|
  instance_eval File.read(gemfile)
end
票数 7
EN

Stack Overflow用户

发布于 2015-08-29 03:18:24

您也可以使用eval_gemfile

代码语言:javascript
复制
gemfiles = [ 'Gemfile.global' ]
gemfiles.each do |gemfile|
  eval_gemfile gemfile
end
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13783801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档