为开发/测试和生产指定两次相同的gem,但路径不同

时间:2014-07-04 02:19:26

标签: ruby-on-rails ruby git github

有时你制作一个特定于项目的宝石。这有助于抽象和拉动一些责任"在主要的Rails应用程序之外,进入一个更模块化的地方。

宝石将位于您的应用程序:

gem 'example_gem', path: './example_gem'

你捆绑,一切都好。现在,您git init将宝石存储在github上的自己的仓库中。您尝试这样做是为了保持开发人员友好:

group :development, :test do
  gem 'example_gem', path: './example_gem'
end

group :production do
  gem 'example_gem', github: 'company/example_gem'
end

为了增加工作流程,您可以背对自己,但在运行bundle后,您会得到:

Your Gemfile lists the gem example_gem (>= 0) more than once.
You should probably keep only one of them.
While it's not a problem now, it could cause errors if you change the version of just one of them later.
You cannot specify the same gem twice coming from different sources.
You specified that example_gem (>= 0) should come from source at ./example_gem and git://github.com/company/example_gem.git

这里的工作流程是能够在开发中编辑gem,当你完成后,提交这些更改并将它们推送到Github。但是,在开发时,您不希望在主应用程序上执行git commit,git push和bundle更新,只是为了看到一个小小的更改。

有谁知道解决此问题的更好方法?

2 个答案:

答案 0 :(得分:5)

是的,有一种更好的方法:首先,将宝石作为所有环境中的git宝石

gem :example_gem, :git => 'git@github.com:foo/example_gem', :branch => :master #you need to set a branch

然后在你的应用程序的文件夹中运行

bundle config --local local.example_gem /path/to/gem

这将编辑.bundle / config以设置此选项(确保此文件未检入源代码管理!)并告诉bundler从该路径获取gem。

当你要推送你的提交时,你必须要小心一点:如果你的应用程序依赖于尚未提交的gem更改,那么显然事情会破裂。此外,当您提交示例gem的存储库时,rails app的Gemfile.lock将会更新。如果您推送一个引用仅存在于example_gem repo副本中的提交的Gemfile.lock,则其他用户将被卡住。

答案 1 :(得分:0)

这适合我。

foo = "https://github.com/me/my-development-version-gem.git"
group :production do
    foo = "https://github.com/me/my-production-version-gem.git"
end
gem "foo", :git => foo

在我的情况下,我需要不同的分支来引导envs