我如何供应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代码。
转到项目页面