当前位置: 首页 > 知识库问答 >
问题:

半修复:缺少“生产”环境的“secret_key_base”

颜欣怡
2023-03-14

我从头开始创建了一个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)

但阿帕奇日志显示:

# 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,或者只是在生产环境中进行测试?

使现代化

我设法通过在虚拟主机上设置RailsEnv开发来修复上述错误,但现在我得到这个另一个错误:

SQLite3::CantOpenException无法打开数据库文件rails . root:/var/www/html/movie db

我正在尝试使用此GEM对电影数据库网站进行查询并获得结果。关于这个新错误有什么建议吗?

共有3个答案

乌杰
2023-03-14

我用这个解决了类似的情况(也许只在类似Ubuntu的环境中有用)。请参见:缺少生产环境的密钥库。希望它有所帮助。

茹照
2023-03-14

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

环境:生产用户:www-数据 组: www-data SECRET_KEY_BASE:我的分项制作

然后,我启动应用程序

thin start-C/where everesthefieonprod/config thin . yml

像魔法一样工作,无需在版本控制上使用密钥

希望它能有所帮助,但我相信独角兽和其他人也可以做同样的事情。

申屠泉
2023-03-14

通过bash的Rails应用密钥

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

只需添加以下内容:

export SECRET_KEY_BASE=`MY_SECRET_KEY`

注意:MY_SECRET_KEY可以是任意值,但在bash控制台上用rake-SECRET生成一个密钥将是安全的,可以用示例中的“MY_SECRET_KEY>替换该密钥。

完成此操作后,您应该会在哈希中看到一个SECRET_KEY_BASE变量,当您在 rails 控制台中调用 ENV 时,该变量将返回。

最后但同样重要的是,重新启动您的rails应用程序,错误应该会消失。

每个rbenv变量的Rails应用密钥

此外,如果您使用的是 rbenv,则可以使用 rbenv-vars 插件来实现每个轨道应用程序密钥环境变量。

这里有一本关于这方面的好书!

使用上帝(godrb.com):感谢

您需要上帝终止,然后重新开始。

 类似资料:
  • 我的情况很像SemiFixed:“production”环境缺少`secret_key_base`: 我的配置/秘密 我在/etc/environment中添加了一个条目,这样当我登录并键入 我得到了我用耙子秘密创建的长串。但是,对于“生产”环境,即使重置了整个计算机,我仍然收到500错误,丢失secret_key_base,在config/secrets.yml中设置此值。那么还有什么可能出错呢

  • 我将密钥添加到heroku配置变量中,但我仍然得到错误。 这是正确的方法吗?我忽略了秘密。我从其他渠道了解到,把这件事推给公众并不是一个好主意。 在heroku配置变量中: 在secrets.yml 我还做错了什么? 此外,如果我将密钥放入heroku的配置变量中,其他开发人员就不会看到这一点了吗?那么,这还不是一种公众行为吗?我一直想知道这个概念。

  • 我第一次在Heroku上部署我的应用时收到错误“发生了未处理的低级错误”,显示: 缺少“生产”环境,请在中设置此值。 1)默认的指定 应该已经与我的应用程序一起部署,它指定通过生产环境中的环境变量加载机密。 5)我还运行了< code>heroku ps:restart,以防应用程序需要一些额外的帮助来使环境变量设置生效 我读了以前的帖子,但过去的答案似乎是确保< code>secrets.yml

  • 我创建了一个rails 4.1.4应用程序,试图在heroku上运行,但我得到以下错误- 缺少环境的

  • 当我导航到Rails生产站点时,我得到: 我看到很多解决这个错误的方法是用生成的长字符串 然而,这对我不起作用(我得到同样的错误)。我必须在< code > config/environments/production . Rb 中包含:< code>config.secret_key_base = "通过运行rake secret生成的长字符串" 来解决这个错误。 我的问题是,这是正确的方法,因

  • 我有ubuntu服务器、Rails 5.0和apache Web服务器,上面还有很多站点。 当我添加新站点时,我收到一个错误“收到来自应用程序的不完整响应” 当我检查apache日志时,我看到消息: 我的配置/机密。yml包含默认值: 另外,我刚刚通过在文件中写入设置了环境变量SECRET_KEY_BASE /etc/profile 我看到than通过命令< code > echo$SECRET