部署的Rails缺少密钥

时间:2014-11-02 16:12:21

标签: ruby-on-rails ruby nginx

我正在尝试将我的Rails应用程序部署到我的Digital Ocean VPS。我已经完成了GoRails guide中的所有步骤,但是当我部署我的项目并访问我的ip adres时,我收到了一条消息:

An error occurred.

Sorry, the page you are looking for is currently unavailable.
Please try again later.

If you are the system administrator of this resource then you should check the error log for details.

Faithfully yours, nginx.

我检查了nginx错误日志,它显示了我:

Exception RuntimeError in Rack application object (Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml`) (process 2490, thread 0x007fbd33665ce0(Worker 1)):

在VPS上,我通过运行rake secret然后运行export SECRET_KEY_BASE= + key创建了一个秘密。现在当我echo $SECRET_KEY_BASE它向我显示我的钥匙。但我仍然收到错误信息。

在我的deploy.rb我有这个:

set :linked_files, %w{config/database.yml config/secrets.yml}

我在VPS上的secrets.yml是这样的:

development:
  secret_key_base: 89dacb16fd905ff4c6352ac93f4676a5dd&^%3f93edce9a5be796712d54b57b91e1335598fd73e3998fddbbdeaf3ee7f65157f2fb01ce1bea5658aa7bf745d1f

test:
  secret_key_base: cf351585b2cb43459f5a073cbfd885b3dd2af44124f13a855522f678c1cf06625c121cd3b7857&&6e7fe2ba11180066753142143231c79c513e71e20372a0462

# Do not keep production secrets in the repository,
# instead read values from the environment.
production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

我刚刚重启了nginx,但仍然没有结果。

更新

deploy@movieseat:~$ ps aux | grep nginx
root      4545  0.0  0.6  98936  3360 ?        Ss   11:32   0:00 nginx: master process         /usr/sbin/nginx
www-data  4548  0.0  0.9  99304  4608 ?        S    11:32   0:00 nginx: worker process
www-data  4549  0.0  0.9  99304  4608 ?        S    11:32   0:00 nginx: worker process
www-data  4550  0.0  0.9  99304  4608 ?        S    11:32   0:00 nginx: worker process
www-data  4551  0.0  0.9  99304  4608 ?        S    11:32   0:00 nginx: worker process
deploy    4655  0.0  0.3   9436  1660 pts/1    S+   11:33   0:00 grep --color=auto nginx

1 个答案:

答案 0 :(得分:0)

我认为您没有检查存储库中的secrets.yml文件,因为您已将其定义为deploy.rb中的链接文件,即

set :linked_files, %w{config/database.yml config/secrets.yml}

你可以为secrets.yml做同样的事情,比如database.yml。我的建议是将 secret_key_base 的值放在secret.yml文件中,而不是从ENV中读取它,因为有权访问部署服务器中链接文件的人无论如何都可以访问ENV vars

但是,如果您在存储库中添加了secrets.yml文件,那么尝试从系统环境中读取值是有意义的。