提问人:user199135 提问时间:11/17/2023 更新时间:11/18/2023 访问量:76
Rails dotenv 生产问题 [已关闭]
Rails dotenv production issue [closed]
问:
[ bin/setup ] [{"RAILS_ENV"=>"test"}, "bin/rails db:reset"] succeeded
[ bin/setup ] Dropping & recreating the test database
[ bin/setup ] Executing [{"RAILS_ENV"=>"production"}, "bin/rails db:reset"]
rails aborted!
ArgumentError: Missing `secret_key_base` for 'production' environment, set this string with `bin/rails credentials:edit` (ArgumentError)
raise ArgumentError, "Missing `secret_key_base` for '#{Rails.env}' environment, set this string with `bin/rails credentials:edit`"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/home/mustdos/Ruby Stuff/MUPSA/config/environment.rb:5:in `<main>'
Tasks: TOP => db:reset => db:drop => db:load_config => environment
(See full trace by running task with --trace)
[ bin/setup ] [{"RAILS_ENV"=>"production"}, "bin/rails db:reset"] failed
大家好,我尝试将 dotenv 与 .env.testing、.env.development 和 .env.production 一起使用,但我似乎无法让 .env.production 运行。
我应该如何解决这个问题?
答:
在测试和开发中,应用程序获取从应用名称派生secret_key_base。其他环境必须使用 config/credentials.yml.enc 中存在的随机键。
因此,正如您的错误消息所建议的那样,我们需要设置一个 .secret_key_base
- 它可以是任何随机字符串,因此让我们使用 .您可以运行此命令来获取 64 个字符的随机字符串。
securerandom
require 'securerandom'
SecureRandom.hex(64)
- 现在,让我们在加密的密钥中创建并设置它。我使用 VSCode,所以我的命令用于编辑我的机密,所以我的命令是这样的。
EDITOR="code --wait" rails credentials:edit --environment production
这将打开包含机密的加密文件的解密状态。它应该是空的,因为你以前没有设置过。
设置你的喜欢这样:secret_key_base
secret_key_base: xxxxxxxx
other_secret: 123
- 保存并关闭文件。这将为您创建两个文件:
production.key
用于解密机密加密文件的密钥。该文件包含合理的数据,不应是公开的(不会推送到您的 Git 存储库)。如果将应用程序部署在某个位置,则应将其设置为名为 的环境变量。这应该添加到您的文件中。RAILS_MASTER_KEY
.gitignore
production.yml.enc
这是机密加密文件。
现在,您应该能够在代码中访问您的机密:
Rails.application.credentials.secret_key_base
Rails.application.credentials.other_secret
Rails.application.credentials.{secret_key}
- 并且您应该能够执行环境操作,例如 或 。
production
rails console
rails db:migrate
PS:在您的环境中,如果您没有使用上述步骤设置任何内容,它实际上正在使用自动生成的。
参考资料在这里。development
secret_key_base
tmp/development_secret.txt
你不需要 dotenv 来声明秘密库
删除 ,也不是个好主意config/database.yml
config/credentials.yml.enc
config/master.key
你试图与系统相反
使用内置凭据。如果您需要对不同的环境使用不同的凭据 - 使用它!
重新生成凭据:
EDITOR=vim rails credentials:edit
对于生产:
EDITOR=vim rails credentials:edit --environment production
仔细检查,您是否在生产凭据中拥有。如果不存在 - 手动添加secret_key_base
还要检查 和 are gitignored,都不是 gitignoredconfig/credentials/*.key
config/master.key
*yml.enc
对于将 ERB 语法与凭据一起使用,如下所示database.yml
谢谢大家,我不得不重做新的rails才能正确地重新创建database.yml
评论
rm config/database.yml config/credentials.yml.enc config/master.key