gpt4 book ai didi

ruby-on-rails - 为 bundle exec 指定环境变量

转载 作者:行者123 更新时间:2023-12-05 02:45:34 24 4
gpt4 key购买 nike

我见过两种不同的方法来在执行bundle exec 时指定环境变量。哪个在 Linux 上是正确的?也许两者都有?我正在寻找一般答案,我知道在这种特殊情况下(更新 Redmine)甚至可能不需要指定 RAILS_ENV。

bundle exec rake db:migrate RAILS_ENV=production
RAILS_ENV=production bundle exec rake db:migrate

最佳答案

这两个选项都可以为 rake 任务定义环境变量。但是,对于其他可执行文件(例如 rails 可执行文件),仅支持在可执行文件之前定义变量的变体。

这里发生的事情是,当您在开始时指定环境变量时,您的 shell(bash、zsh 等)会为新启动的进程设置这些环境变量。这可以为任何过程完成。进程还继承了之前在 shell 中定义的环境变量。因此,第三种选择可能是在您的 shell 中运行它:

export RAILS_ENV=production
bundle exec rake db:migrate

现在,如果您将变量指定为 rake 可执行文件的参数,shell 不会影响、读取或写入这些变量。相反,rake 在将控制权交给实际的 rake 任务(在本例中为 db:migrate)之前检查其给定的进程参数并为其自己的进程设置环境变量。

为了更加一致地为各种可执行文件定义环境变量,我个人倾向于坚持在 shell 中设置环境变量的选项,而不是使用 rake 特性来解析它的论点。

最后,关于您所说的 RAILS_ENV 环境变量在这里可能不是必需的:这可能不是真的。 Redmine 等 Rails 应用程序根据加载的环境定义不同的行为,包括它们连接到的数据库(在 config/database.yml 文件中定义)、其他设置(在 中为 Redmine 定义) >config/configuration.yml) 和内部参数,例如日志记录详细程度和异常处理。因此,您很可能希望始终在所有地方使用 RAILS_ENV=production,因为如果未指定任何内容,Rails(和 Redmine)默认为开发环境。

关于ruby-on-rails - 为 bundle exec 指定环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65915090/

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