【发布时间】:2014-06-23 10:59:46
【问题描述】:
我从头开始创建了一个 Rails 应用程序(Rails 4.1.0),但遇到了一个我无法解决的问题。我已经安装并配置了 Apache 乘客模块,它工作正常。每当我尝试访问虚拟主机时,都会收到错误 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 网站进行查询并获得结果。对这个新错误有何建议?
【问题讨论】:
-
您从 YAML 发布的摘录没有正确缩进。是粘贴中的错误吗? YAML 对缩进非常敏感 -
secret_key_base:应该比production:缩进两个空格。 -
您知道使用 ENV["SECRET_KEY_BASE"] 正在寻找名为 SECRET_KEY_BASE 的系统环境变量。如果你可以 ssh 到主机上,那么 rails 目录中的
SECRET_KEY_BASE=`rake secret`应该设置它。要检查它是否有效,您可以echo $SECRET_KEY_BASE注意:如果您直接在配置文件中设置,这可能不是问题。
标签: ruby-on-rails ruby heroku ruby-on-rails-4