缺少'secret_key_base`用于'生产'环境,在`config / secrets.yml`中设置此值

时间:2014-09-15 01:15:13

标签: ruby-on-rails-4 passenger

当我导航到我的Rails生产网站时,我得到:

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

我发现此错误的许多解决方案是使用export SECRET_KEY_BASE='a long string generated by running rake secret

导出环境变量

然而,这对我没有用(我得到同样的错误)。我必须在config/environments/production.rb中加入: config.secret_key_base = "a long string generated by running rake secret"解决此错误。

我的问题是,这是正确的方法吗,因为实践是不提交密钥?有没有办法让Rails从环境变量中读取?

我正在使用Ubuntu 14.04.1,Apache2,Phusion Passenger堆栈。

2 个答案:

答案 0 :(得分:7)

您正在错误地使用环境变量。在bash中设置环境变量对Apache和Phusion Passenger + Apache没有影响(Nginx也是如此),因为环境变量是基于每个进程继承的,而不是系统范围的。 Phusion Passenger文档有a long section解释原因,以及如何解决它。

答案 1 :(得分:0)

您要么不将完整的secrets.yml提交到存储库并以其他方式部署它(通过厨师或木偶) 或者你让它从生产中的ENV变量中读取秘密

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

将它们作为ENV vars是所谓的12因子应用程序的最佳实践之一。但是,如果您不能将它们存储在服务器上的文件系统中,而只是可用于rails进程,那么这只是一个更好的解决方案。这可以通过docker来实现。