Rails,NGINX,Unicorn和Capistrano:缺少`secret_token`

时间:2015-03-02 19:05:53

标签: ruby-on-rails nginx environment-variables unicorn

我已经使用NGINX,Unicorn和Capistrano将我的Rails 4.2.0应用程序部署到Ubuntu 14.04 VPS中。除了在生产环境中缺少我的secret_key_base之外,一切正常。

这是我的秘密。生产区块:

production:
  secret_key_base: <%= ENV["APP1_SECRET_KEY_BASE"] %>

在服务器的〜/ .bashrc中我有:

export APP1_SECRET_KEY_BASE=token

变量一切正常:

deployer@euler:~$ echo $APP1_SECRET_KEY_BASE
token

deployer@euler:~$ irb
2.2.0 :001 > ENV["APP1_SECRET_KEY_BASE"]
 => "token"
2.2.0 :002 > exit

但是当我尝试访问我的应用程序时,我在log / unicorn.log中收到错误:

ERROR -- : app error: Missing `secret_token` and `secret_key_base` for 'production' environment, set these values in `config/secrets.yml` (RuntimeError)

我觉得Unicorn无法访问这些值。所以我试图使用NGINX Env functionality,但再次没有成功,在我的nginx.conf中尝试了两种方式:

env APP1_SECRET_KEY_BASE;

env APP1_SECRET_KEY_BASE=token;

但是,再一次,没有成功。配置通过nginx启动,但应用程序无法正常工作。

我甚至尝试使用dotenv gem,但也没有成功。

可能发生的任何提示?

3 个答案:

答案 0 :(得分:2)

在/etc/nginx/nginx.conf

使用以下方法添加所需的变量:

passenger_env_var VARIABLE_NAME&#34;值&#34 ;;

答案 1 :(得分:0)

您可以使用dotenv-rails gem来完成此任务。在服务器上的shared目录中有一个名为.env的文件,并将其复制到部署的current目录中。

该文件会包含以下内容:

SECRET_KEY_BASE=6c073f07...

使用dotenv-rails的另一个好处是,如果您的应用程序需要任何其他环境配置,您现在可以拥有它。

答案 2 :(得分:-1)

config/unicorn.rb

中设置环境变量
after_fork do |server, worker|
  # ...
  ENV["SECRET_KEY_BASE"]=your_secret_key
  # ...
end