Bundler和Heroku:条件宝石/两个不同版本的宝石

时间:2012-01-19 19:15:43

标签: ruby bundler

我有一个非公开的gem,而不是我希望在Heroku托管应用程序中使用的可公开访问的repo(它位于本地文件系统上)。

Bundler甚至不允许这样做,例如:

group :production do
  gem 'mygem', :git => #giturl
end

group :development do
  gem "mygem", :require => "mygem", :path => "/gem_dev/mygem"
end

$ bundle install
...
You cannot specify the same gem twice coming from different sources. You specified that mygem (>= 0) should come from source at vendor/cache and source at ...

我已经使用bundle install --path vendorbundle package来尝试让它使用缓存,但由于gem是本地路径,Bundler告诉我(帮助)它不会缓存它。为了解决这个问题,我将.gem复制到了vendor / cache并在Gemfile中使用了这行:

gem 'mygem', :path => 'vendor/cache'

但是我从Bundler那里得到了这个错误:

Could not find gem 'mygem (>= 0) ruby' in source at vendor/cache.
Source does not contain any versions of 'mygem (>= 0) ruby'

Heroku需要一条有效的路径。任何想法我怎么能让这个为我工作?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

使用当前版本(1.0.x)无法完成此操作。来自http://gembundler.com/man/bundle-package.1.html

  

GIT和PATH GEMS在Bundler 1.0中,仅限bundle package命令   包.gem文件,而不是使用:git或:path指定的gems   选项。这可能会在未来发生变化。

以下是我的意见:

为什么不呢?这肯定不是一个技术决定,所以我......受到了委屈... Bundler应该解决问题,因为它是由一些众所周知的rubyists用Ruby写的,你会期待的(或者我愿意)他们已经采取了Ruby核心的路线 - 我们是成年人,让我们选择我们真正想要做什么,无论计算机是否相信。

如果我正在使用Bundler并希望安装一千个不同版本的gem,那么这应该是我的事。警告已经完成了。我们希望下一个版本没有包含在代码中的这个奇怪的决定。