48

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

编辑:

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

rails 2 的工作方式,我可以轻松地用grepvendor/gems. 如果它们捆绑在.gem文件中,那是不可能的。此外,在开发 gem/plugin 时,将其放置在 rails 应用程序中以在上下文中对其进行测试非常有帮助。我将如何使用 bundler/rails3 做这些事情?我的工作流程是否以某种方式固有地被破坏了?

4

5 回答 5

112

回答您问题的第二部分,开发一个插件/gem 并将其与 rails 应用程序一起发布,而不使 gem 公开可用,您可以这样做

宝石文件

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

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

注意:bundle 包解包所有 gem(与 Gemfile.lock 中的一样多)。我不希望那些在 git 中。

于 2010-09-13T07:33:44.877 回答
27

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

于 2010-09-05T17:04:14.400 回答
23

正确的 Bundler 等效项是bundle install --deployment. 这将以解压状态将 gem 安装到vendor/bundle.

于 2011-02-11T10:18:39.110 回答
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 以指向供应商的 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"
于 2016-02-11T20:23:42.910 回答
0

考虑使用由hosts_gem_development gem 提供的“托管”开发基础设施。

开发 gems 通常很棘手,因为它们在您使用它们的应用程序方面就像单独的项目。

“托管”开发基础架构通过将 gem 包含到(使它们“托管”)您的实时应用程序中,使 gem 开发更容易。然后像更新常规应用程序代码一样更新 gem 的代码。

进入项目页面

于 2012-03-08T21:25:06.617 回答