gpt4 book ai didi

ruby-on-rails - 当我在生产中启动 Rails 应用程序时,SECRET_KEY_BASE 环境变量位于何处

转载 作者:数据小太阳 更新时间:2023-10-29 08:59:40 25 4
gpt4 key购买 nike

Rails 4 In Action Book ,它指出在进行了一些其他设置之后:在生产模式(使用 web brick)中启动 Rails 应用程序的最终设置是在终端中输入此命令:

SECRET_KEY_BASE='rake secret' rails s -e production

我正在尝试查看 SECRET_KEY_BASE 的环境变量存储在哪里。

/app/config/secrets.yml 中,它表示 secret_key_base 变量是一个环境变量:

production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

但我查看了 .bashrc.bash_profile 并且变量 SECRET_KEY_BASE 不存在。

最后我想知道:环境变量和它的值在哪里?它存储在我的 Rails 应用程序中的某个地方吗?如果我将此应用程序推送到 github,我希望不是出于安全目的。我假设它没有存储在应用程序中,而是存储在我的计算机系统中的某个地方。在不同的终端窗口中,我执行 echo $SECRET_KEY_BASE 但没有返回任何内容。

提前感谢您帮助我理解缺失的部分。

作为旁注:我知道 this question ,但问题没有那么详细,也没有提供答案。

最佳答案

当你运行它时:

SECRET_KEY_BASE='rake secret' rails s -e production

您实际上并没有为 future 的您“保存” key 。您是一次性定义它的。每当您运行 Ruby 命令时,您都可以设置临时环境变量:

# from shell
KEY="VAL" OTHER_KEY=OTHER_VAL ruby my_command.rb

# from the ruby script
puts ENV["KEY"] # => "VAL"
puts ENV["OTHER_KEY"] # => "OTHER_VAL"

要保留环境变量,您有几个选择。您可以在您的源代码中对它们进行硬编码,但这可能不是一个好主意,因为如果您将代码推送到 Github,任何人都可以看到它。无论如何,这就是环境变量的意义所在,您可以让它们保持系统特定。

选项A

您可以在.bashrc.bash_profile 中设置它们>

首先获取rake secret的结果(将是一个随机字符串)并设置一个shell变量:

KEY=`rake secret` # uses backticks to get command result

然后在bashrc中添加一行导出:

echo -e "export SECRET_KEY_BASE=$KEY" >> ~/.bashrc

选项 B

这是我推荐的,您可以使用 dotenvfigaro以特定于应用程序的方式管理您的环境变量,即不会弄乱您的 bashrc

例如,对于 dotenv,您将创建一个 .env 文件,其中包含:

# change this to the result of rake secret  
SECRET_KEY_BASE=j3e2dd293d

通过将其添加到 gitignore,这将被排除在源代码控制之外。

然后在您的 ruby​​ 应用程序中调用

require 'dotenv'
Dotenv.load

您的ENV["SECRET_KEY_BASE"] 将被设置。

如果需要,您可以制作一个.env.example 文件(包含在源代码管理中),它显示需要定义哪些环境变量。然后,当应用程序被克隆时,您可以运行 mv .env.example .env 并自定义 .env

关于ruby-on-rails - 当我在生产中启动 Rails 应用程序时,SECRET_KEY_BASE 环境变量位于何处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39520822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com