如何为Rails3 / Bundler提供宝石供应商

时间:2010-09-05 16:42:22

标签: ruby-on-rails ruby-on-rails-3 bundler

在Rails 2.X中,我可以简单地将gems复制到vendor/gems/gem_name,或使用rake命令rake gems:unpack。由于Rails3使用了bundler,它似乎不再起作用了。我找到了命令bundle package,但它的工作方式不同。

编辑:

所以,只是详细说明一下:

rails 2的工作方式,我可以轻松地 grep 来查找vendor/gems中的内容。如果它们捆绑在.gem个文件中,那是不可能的。此外,在开发gem /插件时,将它放在rails应用程序中以在上下文中测试它是非常有帮助的。我怎么用bundler / rails3做这些事情?我的工作流程本能地以某种方式破坏了吗?

5 个答案:

答案 0 :(得分:107)

回答问题的第二部分,开发一个插件/ gem并使用rails app运送它而不公开宝石,你可以这样做

的Gemfile

gem 'my_private_gem', :path => "vendor/gems/my_private_gem-VERSION"

假设您执行了gem unpack my_private_gem --target vendor/gems

注意: bundle package 解压缩所有gem(与Gemfile.lock一样多)。我不希望那些是git。

答案 1 :(得分:27)

Bundler等效 bundle package。它将Gemfile中指定的所有.gem文件打包到vendor/cache中,以便将来安装从此缓存而不是http://rubygems.org/获取宝石

答案 2 :(得分:22)

正确的Bundler等效值为bundle install --deployment。这将在未解压缩状态下将gems安装在vendor/bundle

答案 3 :(得分:5)

这对我有用:

gem unpack <GEM_NAME> [-v <VERSION>] --target vendor/gems
gem specification <GEM_NAME> [-v <VERSION>] --ruby > vendor/gems/<GEM_NAME>[-<VERSION>].gemspec

例如:

gem unpack sidekiq-pro -v 2.1.4 --target vendor/gems
gem specification sidekiq-pro -v 2.1.4 --ruby > vendor/gems/sidekiq-pro-2.1.4.gemspec

第一个命令将gem解压缩到vendor / gems目录中。但是,这不包含gemspec。第二个命令创建关联的gemspec。值得注意的是,另一张海报提到了类似的东西。此解决方案正确地以ruby格式而不是yaml格式编写gemspec。

然后,您可以更新您的Gemfile以指向vendored gem:

gem '<GEM_NAME>', '<VERSION>', :path => "vendor/gems/<GEM_NAME>-<VERSION>"

例如:

gem 'sidekiq-pro', '2.1.4', :path => "vendor/gems/sidekiq-pro-2.1.4"

答案 4 :(得分:0)

考虑使用hosted_gem_development gem提供的“托管”开发基础架构。

  

开发宝石通常很棘手,因为它们就您使用它们的应用程序而言就像是单独的项目。

     

“托管”开发基础架构使宝石开发变得更容易,方法是将它们包含在(使其“托管”)您的实时应用程序中。然后像更新常规应用程序代码一样更新gem的代码。

Go to project page