我简直无法超越信息
在“生产”环境中缺少
secret_key_base
,请使用rails credentials:edit
设置此字符串(ArgumentError)
我在这里有rails 5.2.0。跑EDITOR=vim rails credentials:edit
和里面:
production:
secret_key_base: xxxxxxxxxxxxxxxxxxxxxxx
保存,然后在终端RAILS_ENV=production rails c
我想念什么吗?香港专业教育学院重新启动服务器,同样的问题。开发模式没问题。
答案 0 :(得分:8)
Rails 5.2.0需要针对生产环境的额外阶段:
config.require_master_key = true # in config/environments/production.rb
没有它,Rails仍然会使用旧式secret.yml
机制(目前)。
Engine Yard的Christopher Rigor has written a concise post on it。相关文章:
读取凭据
如果要在生产环境中使用凭据,请将以下内容添加到
config/environments/production.rb
config.require_master_key = true
一本好书,也可以看到正面和背面。
注意:正如@TomDogg所发现的,Rails 5.2.1似乎又有所不同,因此此答案可能仅适用于5.2.0。
答案 1 :(得分:6)
保留默认的secrets.yml文件
# config/secrets.yml
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
RAILS_ENV =生产SECRET_KEY_BASE = production_test_key导轨c
答案 2 :(得分:3)
凭据文件中没有production:
development:
和test:
环境标记。 DHH帖子中的更多信息:https://github.com/rails/rails/pull/30067
所以直接写
secret_key_base: xxxxxxxxxxxxxxxxxxxxxxx
请不要将主密钥与秘密密钥库混淆。主密钥用于打开凭据加密文件。
切换到先前的机密系统既不是解决方案,也不是公认的答案。
答案 3 :(得分:3)
Secret_key_base设置不正确。 这是一个没有引起足够重视的已知问题:https://github.com/rails/rails/issues/32947
生成密钥:
EDITOR=vim rails credentials:edit
记录密钥。
保存在config/master.key
中。
SECRET_KEY_BASE=`cat config/master.key` bin/rails assets:precompile
这是我来到的解决方案。我真的不喜欢被强迫通过环境变量来放置它。如果有人有更多关于master.key以及此类工作的信息引起我注意,请发表评论。
答案 4 :(得分:2)
避免将secret_key_base放在环境标记下。放在上面。
这是错误的:
app.post('/', [
//Other validations
.custom((value, {req}) => {
connection.query(
//SQL query
if(results.length){
// Duplication possibility here, hence I want to return a custom message
// via express validator
}
)
// SQL query ends here
}
)
], (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(422).json({ errors: errors.array() });
}
}
尝试以下方法:
production:
secret_key_base: xxxxxxxxxxxxxxxxxxxxxxx
some_other_key: xxx
答案 5 :(得分:1)
在生产环境中使用Rails 5.2应用程序时,我遇到了同样的问题。
我已经设置了其他东西。对我来说,问题不是不是secret_key_base
的设置不正确,而是因为不赞成将环境名称作为常规参数传递,如下所示
rails c RAILS_ENV=production
如果您仔细查看错误日志,它是从顶部开始生成的,则您将看到以下内容:
DEPRECATION警告:不建议将环境名称作为常规参数传递,并将在下一个Rails版本中将其删除。请改用-e选项。 (从bin / rails:9调用)
要在其他环境中运行rails控制台,请使用-e选项,如下所示:
rails console -e production
注意:在secret_key_base
文件中设置secrets.yml
是不安全的,因为这不是安全的密钥存储方式,请使用加密的{{1} }文件和credential.yml
解密。
仅此而已。
我希望这会有所帮助
答案 6 :(得分:0)
使用Dockerfile将Rails应用程序部署到dokku时遇到了这个问题。我的解决方案:
文件config/secrets.yml
引用了一个环境变量:
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
我需要使用dokku命令行(直接在服务器上,或者在我的开发机上使用dokku-cli gem)设置此变量:
dokku config:set SECRET_KEY_BASE=blalbalblablahblablah
答案 7 :(得分:-2)
config / credentials.yml.enc:
list
还要确保您遵守所有YAML缩进规则(仅2个空格),因为这样做没有成功,所以我对该文件的make加载会自动失败。