Rails在生产中缺少SECRET_KEY_BASE

时间:2017-01-18 02:27:01

标签: ruby-on-rails apache ubuntu

我有ubuntu服务器,Rails 5.0和apache web服务器 我也有很多网站

当我添加新网站时,我收到错误“从应用程序收到不完整的回复”

当我检查apache日志时,我看到消息:

App 14561 stderr: [ 2017-01-17 21:01:16.5804 14591/0x0000000064e100(Worker 1) utils.rb:85 ]: *** Exception RuntimeError in Rack application object (Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml`) (process 14591, thread 0x0000000064e100(Worker 1)):

我的config / secrets.yml包含默认值:

secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

此外,我刚刚通过文件/ etc / profile中的文件设置了env变量SECRET_KEY_BASE

我看到的比通过命令echo $SECRET_KEY_BASE

如何修复错误Incomplete response received from application

4 个答案:

答案 0 :(得分:2)

尝试重新启动服务器,可能需要重新启动才能获取config个文件中的新更改。

你的config / secrets.yml文件也应该有:

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

答案 1 :(得分:2)

首先,请注意/etc/profile仅在调用交互式登录shell时获取,因此此文件中设置的任何变量都不会在启动时由Web服务器守护程序运行,这就是为什么它在你的尝试中没有按预期工作。

由于您正在使用Apache + Phusion Passenger,您可以使用SetEnvmod_env选项在Apache配置文件中设置特定于应用程序的环境变量。

否则,您可以通过读取应用程序服务器文件系统上的配置,从应用程序代码中设置环境变量。您可以使用像dotenv这样的宝石来自动化这种模式。

有关文档参考,请参阅Phusion Passenger的文档About Environment Variables: Passenger-Served Apps

答案 2 :(得分:1)

根据您启动服务器的方式,ENV变量可能不可见。

你试过了吗?

Authentication

How to start Rails server with environment variables set?

中讨论了有关使用Rails服务器的环境变量的一些讨论

答案 3 :(得分:0)

检查你有mod_env

sudo a2enmod env

从您的rails应用程序[任何地方,无所谓,它只是一个随机字符串]运行

rake secret
... outputs a big long string ...

然后添加到您的Apache虚拟主机定义。

/etc/apache2/sites-available/*.conf中的某个地方

<VirtualHost ...>
  SetEnv SECRET_KEY_BASE "thebiglongstringgeneratedbyrakesecret"
</VirtualHost>

检查您的工作

apache2ctl -t
Syntax OK

重启apache

apache2ctl restart

从命令行检查

curl https://my-server-url -I # or http 

如果确实有效,请发表评论。