所以我知道在Gemfile中我可以这样做:
group :development, :test do
gem 'gem1'
gem 'gem2'
end
我想要完成的是这样的事情:
group :production do
gem 'gem1'
gem 'gem2'
end
group :development, :test do
gem 'gem1', :path => '/Documents/Code/gem1/'
gem 'gem2', :path => '/Documents/Code/gem2/'
end
所以我们的应用程序使用了我们也在本地开发的2个宝石。为了在我们的本地机器上进行开发时缩短时间,我们希望能够将我们的开发环境指向宝石的本地副本 - 这样它就可以在不需要重新启动rails服务器的情况下获取所有更改。否则我们将不得不重建gem,重新安装gem,并在gem中每次开发更改时重新启动rails。
但是,这样做会给我带来以下错误:
You cannot specify the same gem twice coming from different sources. You specified that gem1 (>= 0) should come from an unspecfied source and source at /Documents/Code/gem1
我甚至尝试过像bundle install --without production
这样的操作,但我得到同样的错误。
有谁知道我是否有可能做我想做的事情?
谢谢!
答案 0 :(得分:6)
我认为有一种支持的方式可以做到这一点,还有一些黑客可以解决它。
支持的方式:
将bundle config
与local
选项一起使用,如下所述:http://bundler.io/v1.3/man/bundle-config.1.html
在生产中使用之前使用env vars并执行bundler:http://www.cowboycoded.com/2010/08/10/using-2-sources-for-a-gem-in-different-environments-with-bundler/
github上存在针对此问题的功能请求,其中包含几个相关问题和大量注释:https://github.com/carlhuda/bundler/issues/396
答案 1 :(得分:5)
解决了链接到的github问题,并且与支持的方式一致。
我在文档中挖掘,你需要设置配置变量并更新你的gemfile以引用分支。
e.g。
编辑您的Gemfile:
gem <gem_name>, git: <git_url>, branch: <branch>
命令行上的:
bundle config local.<gem_name> <local_path_to_gem>
答案 2 :(得分:0)
我通过创建一个与原始Gemfile相同的新Gemfile解决了这个问题,除了目标gem的源代码。然后,在config / boot.rb中,我使用了:
require 'rails'
if Rails.env.development?
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../DevGemfile', __FILE__)
else
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../ProdGemfile', __FILE__)
end