SemiFixed:缺少'secret_key_base`用于'制作'环境

时间:2014-05-06 17:35:03

标签: ruby-on-rails ruby heroku ruby-on-rails-4

我已经从头开始创建了一个rails应用程序(Rails 4.1.0),我遇到了一个我无法解决的问题。我已经安装并配置了Apache Passenger Module,它工作正常。每当我尝试访问虚拟主机时,都会收到错误500:

Missing secret_key_base for 'production' environment, set this value in config/secrets.yml

secret.yml文件包含以下配置:

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

即使不推荐我也这样做了:

    production:
  secret_key_base: XXXXXXXXXXXXXXXXXXXXXXXXXXXX (random key)

但Apache日志显示:

# tailf /etc/httpd/logs/error_log
[Tue May 06 12:56:18 2014] [error] [client 192.168.3.1] Premature end of script headers:
App 4405 stderr: [ 2014-05-06 12:56:18.5763 4421/0x9d48bdc(Worker 1) utils.rb:68 ]: *** Exception RuntimeError in Rack application object (Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml`) (process 4421, thread 0x9d48bdc(Worker 1)):
App 4405 stderr:        from /usr/local/rvm/gems/ruby-2.1.1/gems/railties-4.1.0/lib/rails/application.rb:440:in `validate_secret_key_config!'
App 4405 stderr:        from /usr/local/rvm/gems/ruby-2.1.1/gems/railties-4.1.0/lib/rails/application.rb:195:in `env_config'
App 4405 stderr:        from /usr/local/rvm/gems/ruby-2.1.1/gems/railties-4.1.0/lib/rails/engine.rb:510:in `call'
App 4405 stderr:        from /usr/local/rvm/gems/ruby-2.1.1/gems/railties-4.1.0/lib/rails/application.rb:144:in `call'
App 4405 stderr:        from /usr/local/rvm/gems/ruby-2.1.1/gems/passenger-4.0.41/lib/phusion_passenger/rack/thread_handler_extension.rb:74:in `process_request'
App 4405 stderr:        from /usr/local/rvm/gems/ruby-2.1.1/gems/passenger-4.0.41/lib/phusion_passenger/request_handler/thread_handler.rb:141:in `accept_and_process_next_request'
App 4405 stderr:        from /usr/local/rvm/gems/ruby-2.1.1/gems/passenger-4.0.41/lib/phusion_passenger/request_handler/thread_handler.rb:109:in `main_loop'
App 4405 stderr:        from /usr/local/rvm/gems/ruby-2.1.1/gems/passenger-4.0.41/lib/phusion_passenger/request_handler.rb:448:in `block (3 levels) in start_threads'

我如何解决此错误?我如何访问开发环境?我的意思是我如何编写代码,在浏览器中测试然后部署到Heroku或只是在生产环境中进行测试?

更新

我设法通过在VirtualHost上设置RailsEnv development来解决上述错误,但现在我收到了另一个错误:

  

SQLite3 :: CantOpenException无法打开数据库文件   Rails.root:/ var / www / html / moviedb

我尝试使用this GEM对TheMovieDB网站进行make查询并获得结果。有关这个新错误的任何建议吗?

3 个答案:

答案 0 :(得分:19)

通过bash Rails app密钥

如果您可以访问运行rails应用程序的用户bash控制台,并且您没有使用thin,那么您可以提供环境通过用户~/.bashrc

变量

只需添加以下内容:

export SECRET_KEY_BASE=`MY_SECRET_KEY`

注意:MY_SECRET_KEY可以是任何东西,但在bash控制台上使用rake secret生成一个密钥是安全的,将该密钥替换为示例中的“MY_SECRET_KEY”。

完成后,您应该在SECRET_KEY_BASE中看到hash变量,当您在rails控制台中调用ENV时会返回该变量。

最后但并非最不重要的是,重启rails应用程序,错误应该消失。

每个rbenv-vars的Rails app密钥

此外,如果您使用的是rbenv,则可以使用rbenv-vars插件来获取每个应用密钥环境变量。

对此的好读是here!

使用god(godrb.com):感谢hlcs

您需要god terminate,然后重新开始。

答案 1 :(得分:4)

我做了什么:在我的生产服务器上,我为Thin创建了一个配置文件(confthin.yml)(我正在使用它)并添加以下信息:

环境:生产 用户:www-data 组:www-data SECRET_KEY_BASE:mysecretkeyproduction

然后我用

启动应用程序

瘦启动-C /whereeveristhefieonprod/configthin.yml

像魅力一样工作,然后无需在版本控制上使用密钥

希望它能提供帮助,但我确信Unicorn和其他人可以做同样的事情。

答案 2 :(得分:1)

我用这个解决了类似的情况(也许只在类似Ubuntu的环境中有用)。见:Missing secret key base for production environment。希望它有所帮助。