Rails将Gemfile.lock部署到开发和生产存储库

时间:2014-04-24 01:11:23

标签: ruby-on-rails capistrano bundler

我有一个用于开发的应用目录:d:/some/dir/myapp。我有一个名为sample-repo的存储库,但它有两个分支:developmaster

我的应用程序的Gemfile使用sample-repo存储库的特定于环境的分支:

RAILS_ENV = ENV['RAILS_ENV'] || 'development'
gem 'sample-repo',  git: "git@bitbucket.org:MyUserName/sample-repo.git", 
                branch: "#{ RAILS_ENV.to_sym == :production ? :master : :develop }"

我的网站主机有两个独立的目录;一个用于开发,另一个用于生产。每个都通过各自分支机构的git pull进行更新(development => develop,production => master)。

这是一个问题,因为当我在开发机器上运行bundle update时,Gemfile.lock包含sample-repo gem,指定develop分支。然后git将Gemfile.lock推送到我的repo(开发和主控),现在master repo包含一个指定开发分支的Gemfile.lock!

即,问题是在developmaster分支之间只有一个Gemfile.lock文件。

1 个答案:

答案 0 :(得分:0)

This answer解决了我的问题。我创建了一个名为.rails-env的文件,其中包含一个指定环境捆绑器应该使用的简单字符串。必须将此文件保留在存储库之外。如果不存在,则bundler默认为开发。

问题的第二部分是我必须调整我的部署过程。我创建了一个在开发环境下运行bundle update的小脚本,并在为生产做同样的事情之前等待按键。生成开发Gemfile.lock文件后,我将更改推送到develop存储库分支。在它完成生产之后,我推送到master