Ruby on rails 生产中未识别rails密钥库
因此,我正在尝试在生产环境中部署我的rails应用程序。当我转到页面时,我得到一个500错误。当我转到错误日志时,我得到以下错误:Ruby on rails 生产中未识别rails密钥库,ruby-on-rails,ruby,rake,Ruby On Rails,Ruby,Rake,因此,我正在尝试在生产环境中部署我的rails应用程序。当我转到页面时,我得到一个500错误。当我转到错误日志时,我得到以下错误: Exception RuntimeError in Rack application object (Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml`) 我运行的是Rails 4.1,我的config/secrets.yml
Exception RuntimeError in Rack application object (Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml`)
我运行的是Rails 4.1,我的config/secrets.yml如下所示:
development:
secret_key_base: <development key>
test:
secret_key_base: <test key>
# Do not keep production secrets in the repository,
# instead read values from the environment.
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
# Do not keep production secrets in the repository,
# instead read values from the environment.
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
开发:
机密密钥库:
测试:
机密密钥库:
#不要在存储库中保留生产机密,
#而是从环境中读取值。
制作:
机密密钥库:
我运行rake secret来获取密钥,并将导出放入我的bash_配置文件中,并将其来源化。我成功运行了rake资产:预编译。但我还是不断地犯这个错误。有什么想法吗
更新:我试图更新提供的错误消息以提供更好的信息…但消息没有更新。然后,我尝试将密钥直接添加到yml文件中,而不是使用环境变量,但仍然没有骰子。我在hostmonster上运行,所以我无法重新启动服务器…但有些事情告诉我这就是需要做的
更新2:在睡了一夜之后,这个问题似乎不再是问题了。它一定是某种缓存。现在我的问题是,它试图使用我几天前为数据库更改的旧配置。如果我知道如何取消缓存,我会把它贴在这里,并把它标记为一个答案。如果其他人知道怎么做,请让我知道,我会标记它作为一个答案。我使用HostMonster作为我的主机,并遵循他们在其网站上为我的rails应用程序提供主机的步骤
YourAppName::Application.initialize之后在config/environment.rb
中调用code>,无法更改设置
问题不在于ENV伪哈希。如果在环境中没有这样的密钥,则secret\u key\u base将为零。我遇到了同样的问题,我解决了创建一个环境变量的问题,该变量将在每次登录到生产服务器并自行配置时加载: 因此,我将Rails 4.1与Unicorn v4.8.2一起使用,当我尝试部署我的应用程序时,它没有正确启动,并在Unicorn.log文件中发现以下错误消息: 应用程序错误:缺少“生产”环境的
secret\u key\u base
,请在config/secrets.yml
中设置此值(RuntimeError)
经过一点研究,我发现Rails 4.1改变了管理密钥的方式,因此如果我们阅读位于exampleRailsProject/config/secrets.yml
的secrets.yml文件(您需要将“exampleRailsProject”替换为您的项目名称),您会发现如下内容:
development:
secret_key_base: <development key>
test:
secret_key_base: <test key>
# Do not keep production secrets in the repository,
# instead read values from the environment.
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
# Do not keep production secrets in the repository,
# instead read values from the environment.
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
这将给出一个包含字母和数字的大字符串,这是您需要的,所以请复制它(我们将该代码称为生成的代码)
2.1-现在,如果我们以root用户身份登录到服务器,我们需要找到此文件并打开它:
$ vi /etc/profile
然后我们转到文件的底部(“SHIFT+G”表示VI中的大写字母G)
我们将使用生成的_代码编写环境变量(按“i”键在VI中编写),确保在文件末尾的新行中:
export SECRET_KEY_BASE=GENERATED_CODE
export SECRET_KEY_BASE=GENERATED_CODE
编写代码后,我们保存更改并关闭文件(我们按下“ESC”键,然后写入“:x”和“ENTER”键以保存并在VI中退出)
2.2但如果我们以普通用户身份登录,我们可以将其称为示例用户,我们需要找到以下其他文件之一:
$ vi ~/.bash_profile
$ vi ~/.bash_login
$ vi ~/.profile
这些文件是按重要性排序的,这意味着如果你有第一个文件,那么你就不需要写其他文件了。因此,如果您在目录“~/.bash\u profile”和“~/.profile”中找到这两个文件,您只需在第一个“~/.bash\u profile”中写入,因为linux将只读取这一个,而忽略另一个
然后我们转到文件的底部(“SHIFT+G”表示VI中的大写字母G)
我们将使用生成的_代码编写环境变量(按“i”键在VI中编写),确保在文件末尾的新行中:
export SECRET_KEY_BASE=GENERATED_CODE
export SECRET_KEY_BASE=GENERATED_CODE
编写代码后,我们保存更改并关闭文件(我们按下“ESC”键,然后写入“:x”和“ENTER”键以保存并在VI中退出)
3.-我们可以使用以下命令验证环境变量是否在linux中正确设置:
$ printenv | grep SECRET_KEY_BASE
或与:
$ echo $SECRET_KEY_BASE
当您执行此命令时,如果一切正常,它将向您显示我们之前生成的_代码。最后,完成所有配置后,您可以使用Unicorn或其他工具毫无问题地部署Rails应用程序
现在,当您关闭shell终端并再次登录到生产服务器时,您将设置此环境变量并准备使用它
就这样!!我希望本小指南能帮助您解决此错误。我正在使用Hostmonster托管此应用程序(共享托管)…如何重新启动服务器?此外,在4.1中没有配置/初始化器/secret_token.rb。现在只有一个config/secrets.yml,我在上面发布了它来检查部署设置。可能您需要在链接的_文件中指定config/secrets.yml(如果您使用的是capistrano,则类似于database.yml),但我不使用capistrano。使用hostmonster,您只需使用一些乘客配置设置一个.htaccess文件,然后就可以运行了。我已经让它在环境设置为“开发”的情况下工作,但当我切换到“生产”时,它给我带来了问题,错误如上所述。事实上,您的回答是正确的。为了便于将来重新启动主机服务器,只需从应用程序库目录运行触摸tmp/restart.txt
。一旦我这么做了,它就收到了我的新信息。谢谢