在我的Gemfile中,我指定基于RAILS_ENV在git存储库上使用的分支 . 但是当Capistrano部署时,它会运行 bundle install
命令 - 因为它设置了's run through a shell, the proper environment (staging) isn' . 它默认为开发并给出一个错误,指出Gemfile.lock与安装的内容不匹配 .
您正在尝试在更改Gemfile后以部署模式安装 . 在其他地方运行bundle install并将更新的Gemfile.lock添加到版本控制 . 您已添加到Gemfile:* source:git@bitbucket.org:MyRepository / manager-engine.git(在开发时)您已从Gemfile中删除:* source:git@bitbucket.org:MyRepository / manager-engine.git (在master中)你已经在gemfile:* manager中从git@bitbucket.org更改了:MyRepository / manager-engine.git(在开发时)到没有指定的源
Gemfile:
RAILS_ENV = ENV['RAILS_ENV'] || 'development'
gem 'manager', git: "git@bitbucket.org:MyRepository/manager-engine.git", branch: "#{ [:production, :staging].include?(RAILS_ENV.to_sym) ? :master : :develop }"
例如,如果rails环境不是'production'或'staging',则使用'develop'分支 .
deploy/staging.rb:
set :branch, :master
set :keep_releases, 2
set :stage, :staging
set :rails_env, 'staging'
set :bundle_without, [:development, :test]
set :deploy_to, '/home/useraccount/rails_deployments/staging.www'
server 'localhost', user: 'useraccount', roles: %w{web app db}
所以最简洁:
在常规SSH终端中,要在适当的环境下安装存储库gem,我必须发出 RAILS_ENV=staging bundle install
. 否则,只需运行 bundle install
从开发分支安装存储库 . 由于Capistrano只运行 bundle install
并且不包括 RAILS_ENV
,因此出现了这个问题 . 但是没有Capistrano设置:rails_env,还是不是真正的系统环境变量?
1 回答
我想如果没有更好的方法......
我最终使用了SO中其他地方所示的方法,并根据我的需要对其进行了修改 .
修改Gemfile以包含:
如果
.rails-env
不包含或不存在,则默认为开发 . 否则它将第一个单词作为环境 . 要从命令行创建文件,只需键入echo "your-environment-name-here" > .rails-env
,假设您是're in the app'的根目录 .您还可以使用上面的命令在每次部署时使用capistrano创建文件,或者只创建文件的符号链接并在部署之间共享:
Deploy.rb:
所以现在可以通过名为.rails-env的应用程序根目录中的文件强制环境 . 明确的RAILS_ENV调用,例如
RAILS_ENV=test bundle exec ...
仍然可以像宣传的那样工作 .