首页 文章

Capistrano没有为捆绑器设置RAILS_ENV

提问于
浏览
0

在我的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 回答

  • 0

    我想如果没有更好的方法......

    我最终使用了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 ,假设您是're in the app'的根目录 .

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

    Deploy.rb:

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

    所以现在可以通过名为.rails-env的应用程序根目录中的文件强制环境 . 明确的RAILS_ENV调用,例如 RAILS_ENV=test bundle exec ... 仍然可以像宣传的那样工作 .

相关问题