我如何供应Rails3 / Bundler的gem

在Rails 2.X中,我可以简单地将gem复制到vendor/gems/gem_name ,或者使用rake命令rake gems:unpack 。 由于Rails3使用捆绑器,它似乎不再工作。 我已经find了命令bundle package ,但是它不能以相同的方式工作。

编辑:

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

轨道2的工作方式,我可以很容易地findvendor/gems东西。 如果它们捆绑在.gem文件中,那是不可能的。 另外,在开发一个gem / plugin的时候,把它放在一个rails应用程序中来testing它是非常有用的。 我如何用bundler / rails3做这样的事情? 我的工作stream程是否以某种方式破坏了?

回答你的问题的第二部分,开发一个插件/gem和运输与Rails应用程序没有使gem公开可用,你可以这样做

的Gemfile

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

假设你执行了一个gem unpack my_private_gem --target vendor/gems

注意: 捆绑包解包所有的gem(和Gemfile.lock一样多)。 我不希望那些在混帐。

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

正确的Bundler等价物是bundle install --deployment 。 这会将gem以解压后的状态安装在vendor/bundle

这对我来说是有效的:

 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。 第二个命令创build关联的gemspec。 值得注意的是,另一张海报提到了类似的东西。 这个解决scheme正确地写入ruby格式的gemspec而不是yaml。

然后你可以更新你的Gemfile来指向已售出的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" 

你可以很容易地结束这样的事情;

 gem list | awk '{print $1}' | xargs gem unpack --target vendor/gems 

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

开发gem往往是棘手的,因为它们就像你使用它们的应用程序一样独立运行。

“托pipe”开发基础架构通过将您的实时应用程序纳入(使其“托pipe”)来使gem开发变得更加轻松。 然后,像更新常规应用程序代码那样更新您的gem代码。

转到项目页面