当我导航到我的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堆栈。
答案 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来实现。