Capistrano的不设置RAILS_ENV用于捆绑(Capistrano doesn't

2019-10-20 01:33发布

在我的Gemfile我指定基于RAILS_ENV一个Git仓库使用哪一个分支。 然而,当Capistrano的部署,它运行的bundle install命令-并且因为它是通过shell中运行,适当的环境(分段)未设置。 它默认为发展和给我的错误,指出有Gemfile.lock的之间的不匹配,并安装了什么。

您正在试图改变你的Gemfile后,在部署模式下安装。 运行bundle install其他地方,并添加更新Gemfile.lock的版本控制。

你已经加入到Gemfile文件:*资料来源:git@bitbucket.org:MyRepository /经理,engine.git(在开发)

您已经从Gemfile中删除:*资料来源:git@bitbucket.org:MyRepository /经理,engine.git(在主机)

从*经理:你在Gemfile中改变git@bitbucket.org:MyRepository/manager-engine.git (at develop) ,以no specified source

的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 }"

即使用“开发”分支,如果轨道环境以外的任何其他“生产”或“分期”。

部署/ 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终端,安装适当的环境下库宝石,我不得不发出RAILS_ENV=staging bundle install 。 否则,只是运行bundle install安装来自开发分支库。 由于Capistrano的只是运行bundle install ,并且不包括RAILS_ENV ,发生此问题。 但不Capistrano的设置:RAILS_ENV,或者是不是一个真正的系统环境变量?

Answer 1:

我想,如果有没有更好的办法?

我结束了使用SO说明在其他地方的方法和修改它为我的需求。

修改的Gemfile包含:

# Read environment from A) Explicit set through command, B) Existence of override file's contents or C) Default to development
RAILS_ENV = ENV['RAILS_ENV'] || `cat .rails-env`.to_s.split.first || 'development'

如果.rails-env包含什么或者不存在,则默认为发展。 否则,它需要的第一个字的环境。 要创建命令行文件,只需键入echo "your-environment-name-here" > .rails-env ,假设你在应用程序的根目录是。

您还可以创建文件在每次使用上面的命令,或者只是创建符号链接到文件和部署之间共享与Capistrano的部署:

Deploy.rb:

set :linked_files, %w{ .rails-env }

所以,现在的环境,可以通过在你的应用程序称为.rails-ENV的根文件强制执行。 显式调用RAILS_ENV如RAILS_ENV=test bundle exec ...将仍然工作作为标榜。



文章来源: Capistrano doesn't set RAILS_ENV for bundler