Pao*_*nti 160 ruby ruby-on-rails heroku ruby-on-rails-4
我从头开始创建了一个rails应用程序(rails 4.1),我遇到了一个我无法解决的奇怪问题.
每次我尝试在Heroku上部署我的应用程序时,都会收到错误500:
缺少
secret_key_base"生产"环境,请设置此值config/secrets.yml
secret.yml文件包含以下配置:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
Run Code Online (Sandbox Code Playgroud)
在Heroku上,我已经使用"rake secret"命令的结果配置了一个环境变量"SECRET_KEY_BASE".如果我启动"heroku config",我可以看到具有正确名称和值的变量.
为什么我仍然会收到此错误?
非常感谢
Dem*_*gus 201
我遇到了同样的问题,我通过创建一个环境变量来解决它,每次登录到生产服务器时都会加载它并制作一个配置它的步骤的迷你指南:
https://gist.github.com/pablosalgadom/4d75f30517edc6230a67
我正在使用Rails 4.1和Unicorn v4.8.2,当我尝试部署我的应用程序时,它没有正确启动,在unicorn.log文件中我发现此错误消息:
app error: Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml` (RuntimeError)
经过一些研究后我发现Rails 4.1改变了管理secret_key的方式,所以如果你读到位于exampleRailsProject/config/secrets.yml你的secrets.yml文件,你会发现这样的东西:
# Do not keep production secrets in the repository,
# instead read values from the environment.
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
Run Code Online (Sandbox Code Playgroud)
这意味着Rails建议您secret_key_base在生产服务器中使用环境变量,为了解决此错误,您应该按照以下步骤在生产服务器中为Linux(在我的示例中为Ubuntu)中创建环境变量:
在生产服务器的终端中执行下一个命令:
$ RAILS_ENV=production rake secret
Run Code Online (Sandbox Code Playgroud)
这将返回一个包含字母和数字的大字符串,复制该字符串(我们将该代码称为GENERATED_CODE).
登录您的服务器
如果以root用户身份登录,请找到此文件并进行编辑:
$ vi /etc/profile
Run Code Online (Sandbox Code Playgroud)
转到文件的底部(VI中的大写字母G的"SHIFT + G")
使用GENERATED_CODE编写环境变量(按"i"键在VI中写入),请确保在文件末尾的新行中:
$ export SECRET_KEY_BASE=GENERATED_CODE
Run Code Online (Sandbox Code Playgroud)
保存更改并关闭文件(按"ESC"键,然后写入":x"和"ENTER"键进行保存,然后退出VI).
但是,如果您以普通用户身份登录,请将此名称称为"example_user",您需要找到以下其中一个文件:
$ vi ~/.bash_profile
$ vi ~/.bash_login
$ vi ~/.profile
Run Code Online (Sandbox Code Playgroud)
这些文件按重要性顺序排列,这意味着如果您有第一个文件,则不需要写入其他文件.因此,如果您在目录中找到了这两个文件,~/.bash_profile并且~/.profile您只需要在第一个文件中写入~/.bash_profile,因为Linux将只读取此文件而另一个将被忽略.
然后我们转到文件的底部(VI中的大写字母G的"SHIFT + G").
我们将使用GENERATED_CODE编写环境变量(按"i"键在VI中写入),请确保在文件末尾的新行中:
$ export SECRET_KEY_BASE=GENERATED_CODE
Run Code Online (Sandbox Code Playgroud)
编写代码后,保存更改并关闭文件(按"ESC"键然后写入":x"和"ENTER"键进行保存并退出VI).
您可以使用以下命令验证我们的环境变量是否在Linux中正确设置:
$ printenv | grep SECRET_KEY_BASE
Run Code Online (Sandbox Code Playgroud)
或者:
$ echo $SECRET_KEY_BASE
Run Code Online (Sandbox Code Playgroud)
执行此命令时,如果一切正常,它将显示之前的GENERATED_CODE.最后完成所有配置后,您应该可以使用Unicorn或其他方式部署没有问题的Rails应用程序.
当您关闭shell终端并再次登录到生产服务器时,您将设置此环境变量并准备使用它.
就是这样!! 我希望这个迷你指南可以帮助您解决此错误.
免责声明:我不是Linux或Rails大师,所以如果您发现错误或任何错误,我将很乐意解决它!
Eri*_*man 81
我将假设您没有secrets.yml检入源控件(即它在.gitignore文件中).即使这不是你的情况,也是许多观看这个问题的人所做的事情,因为他们的代码暴露在Github上并且不希望他们的密钥浮动.
如果它不在源代码管理中,Heroku不知道它.因此Rails正在寻找Rails.application.secrets.secret_key_base并且尚未设置,因为Rails通过检查secrets.yml不存在的文件来设置它.简单的解决方法是进入您的config/environments/production.rb文件并添加以下行:
Rails.application.configure do
...
config.secret_key_base = ENV["SECRET_KEY_BASE"]
...
end
Run Code Online (Sandbox Code Playgroud)
这告诉您的应用程序使用环境变量设置密钥而不是在其中查找secrets.yml.这样可以节省我很多时间来预先了解这一点.
dan*_*des 55
添加config/secrets.yml到版本控制并再次部署.您可能需要删除一行,.gitignore以便您可以提交该文件.
我有这个完全相同的问题,结果发现.gitignore我的Rails应用程序包含的样板Github config/secrets.yml.
小智 12
这对我有用.
SSH进入您的生产服务器并cd进入当前目录,运行bundle exec rake secret或者rake secret,您将获得一个长字符串作为输出,复制该字符串.
现在跑sudo nano /etc/environment.
粘贴到文件的底部
export SECRET_KEY_BASE=rake secret
ruby -e 'p ENV["SECRET_KEY_BASE"]'
Run Code Online (Sandbox Code Playgroud)
rake secret您刚刚复制的字符串在哪里,粘贴复制的字符串代替rake secret.
重启服务器并运行测试echo $SECRET_KEY_BASE.
| 归档时间: |
|
| 查看次数: |
149535 次 |
| 最近记录: |