【问题标题】:bundler Rails require different gem in developmentbundler Rails 在开发中需要不同的 gem
【发布时间】:2012-03-17 11:48:13
【问题描述】:

我正在尝试建立一个开发环境来开发 Rails gem。我想在开发模式下从本地源加载 gem,在生产中通过 ruby​​gems 加载。我想做类似以下的事情:

宝石文件

group :production do
  gem 'my_gem', '1.0.0'
end

group :development do
  gem 'my_gem', :path => '~/apps/my_gem'
end

当我运行bundle 命令时,bundler 抱怨你不能两次加载同一个 gem。有没有办法根据 Rails 环境要求不同版本的 gem?

【问题讨论】:

    标签: ruby-on-rails ruby rubygems bundler


    【解决方案1】:

    我也遇到了同样的问题,解决方法如下:

    if ENV["RAILS_ENV"] == "development"
      gem 'my_gem', :path => '~/apps/my_gem'
    else
      gem 'my_gem', '1.0.0'
    end
    

    然后您可以在本地机器上运行RAILS_ENV=development bundle,并通过RAILS_ENV=development bundle exec运行任何与环境相关的命令

    【讨论】:

    • 我喜欢这个解决方案,您甚至可以将ENV['RAILS_ENV'] ||= 'development' 添加为默认开发。我可能会选择这个作为正确答案。
    • 请注意,这不适用于 Heroku,因为 Heroku 无法处理 Gemfile 中的条件。
    【解决方案2】:

    这样做违背了使用 Bundler 的目的。重点是,无论您的应用程序在何处加载,您使用的依赖项都是一致的,故意试图规避该目标只会给您带来问题。

    当您的本地版本的 gem 与 Rubygems 中发布的版本不同时会发生什么(可能是因为您忘记发布新版本?)?您的应用可能会崩溃,并且您将无法在开发中重现它,这可怕。

    至于为什么用 Bundler 甚至无法想象(至少现在):如果 Gem 的依赖版本在 Rubygems 版本中与本地版本不同,会发生什么情况?现在您的整个 Gemfile.lock 需要有两个完全不同的依赖关系图,并且您可能会在生产中引入无数更多在开发中不存在的故障点。

    也就是说,在对 gem 进行更改时暂时将 Gemfile 更改为本地版本是可以的,但你应该将其改回并发布新版本的 gem,然后 bundle update my_gem相应地更新 Gemfile.lock。

    【讨论】:

    • 我一直在努力加快 Rails gems 的开发过程,并且不断编辑 Gemfile 是我想要消除的一个步骤。在阅读您的回答后,我现在意识到为什么捆绑器不提供这种行为。我想我没有想到这一点,我将不得不忍受这一步。感谢您的周到回复。
    • 没关系。我理解你想要这样做的动机。另请注意,您可以让 Bundler 将 Git 存储库用于 gem,这也很有用。
    • 当然可以,但是我们开发的 gem 有问题。在开发中,我希望捆绑器从本地安装的 gems 更新,以获取最新的,但生产应该从 github 获取它以仅获取合并版本。我真的不希望 Gemfile 或两行中有两个版本依赖项,但我确实希望有条件地将 :git 选项仅用于生产。我认为 OP 正在做类似的事情,生产应该只使用 gem repo。
    • 基本上,我完全同意您需要一份关于版本范围边界的声明,以使开发与生产保持同步。当需要更改的代码在开发中更改时签入时,您应该签入新的生产范围。但是,bundler 具有许多关于从何处获取代码的 Gemfile 功能,并且生产可能与开发不同,仅限于官方经过审查的来源,例如 gem 服务器或 git repo 服务器。
    【解决方案3】:

    可能是你把 gem 'my_gem' 放在了别的地方,仔细检查一下

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-06
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      • 1970-01-01
      • 1970-01-01
      • 2011-05-06
      相关资源
      最近更新 更多