首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Capistrano 3在部署时设置secret_key_base

使用Capistrano 3在部署时设置secret_key_base
EN

Stack Overflow用户
提问于 2015-02-13 16:54:09
回答 4查看 4.5K关注 0票数 4

所以我正在部署一个托管在DigitalOcean上的Ubuntu droplet,一个运行在Apache和Phusion Passenger上的Rails4应用程序。在部署之后,由于Rails产品找不到用于生产的secret_key_base令牌,我得到了500。但是,如果我运行一个echo $SECRET_KEY_BASE,它将返回由我的deploy.rb生成的rake密钥。

设置该设置deploy.rb任务是:

代码语言:javascript
复制
namespace :deploy do
  task :start do ; end
  task :stop do ; end

  desc "Setup ENV variables"
  task :env_vars do
    on "root@xxx.xxx.xxx.xx" do
      execute "export SECRET_KEY_BASE=#{`bundle exec rake secret`}"
    end
  end
end

before "deploy", "deploy:env_vars"

然而,Rails仍然没有采用它。我甚至在我的服务器和rails console中检查了ssh,ENV["SECRET_KEY_BASE"]返回了正确的秘密令牌。

我认为使用Capistrano的:default_env可以工作,但这似乎只为部署任务设置了环境变量,但实际上并不是在服务器上。有什么简单的方法来解决这个问题吗?我的退路是将秘密放在secrets.yml中,因为存储库是私有的,但我不这样做。

EN

回答 4

Stack Overflow用户

发布于 2015-06-13 02:17:57

有一个gem可以用来完成这个任务:https://github.com/capistrano-plugins/capistrano-secrets-yml

安装

将此代码添加到Gemfile:

代码语言:javascript
复制
group :development do
  gem 'capistrano', '~> 3.2.1'
  gem 'capistrano-secrets-yml', '~> 1.0.0'
end

然后:

$ bundle安装

设置和使用

代码语言:javascript
复制
make sure your local config/secrets.yml is not git tracked. It should be on the disk, but gitignored.

在本地config/secrets.yml中填充生产密钥:

代码语言:javascript
复制
production:
  secret_key_base: d6ced...

添加到Capfile:

代码语言:javascript
复制
require 'capistrano/secrets_yml'

通过执行以下任务在远程服务器上创建secrets.yml文件:

代码语言:javascript
复制
$ bundle exec cap production setup

您现在可以继续执行其他部署任务。

票数 5
EN

Stack Overflow用户

发布于 2015-06-13 02:41:07

您可以在shared/config中的服务器中创建名为application.yml的文件。

从以下解决方案中选择任何一种

deploy.rb中的以下代码将自动符号链接您的application.yml

代码语言:javascript
复制
set :linked_files, %w{config/application.yml}

然后通过一个简单的capistrano任务将这个application.yml与您的current/config/application.yml进行符号链接。

票数 2
EN

Stack Overflow用户

发布于 2015-03-06 14:12:12

在rails引导时,使用dotenv将环境变量从.env[.<staging>]加载到env中,而不是在deploy.rb中导出环境变量。

请按照以下步骤操作:

将这一行添加到Gemfile的顶部:

代码语言:javascript
复制
gem 'dotenv-rails'

deploy/production.rb中将.env.production文件放入linked_file

代码语言:javascript
复制
set :linked_files, fetch(:linked_files, []).push('.env.production')

在远程主机上,将.env.production文件添加到包含以下行的shared文件夹中:

代码语言:javascript
复制
SECRET_KEY_BASE=<Your secret>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28495711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档