【问题标题】:Environment variables not correctly set环境变量未正确设置
【发布时间】:2016-02-15 10:37:37
【问题描述】:

我一直在使用 gem。我想在计划任务之前设置我的环境变量。下面代码中的第二行是我想在我的 schedule.rb 文件中运行的命令。但看起来我无法完成它,所以我将其注释掉并尝试了不同的方式。似乎仍然没有任何效果。在 ruby​​ 代码中打印 env 似乎正确地显示了所需的变量,但是在运行“bundle execwhen”并使用 env 命令检查终端之后,变量似乎不存在。这里有什么问题?

every :hour do
  # Run shell script to assign variables and continue the rake task
  #system "for line in `cat config/myEnvFile.env` ; do export $line ; done"
  f = File.open("config/myEnvFile.env", "r")
  f.each_line do |line|
    j = line.split(" ")
    arr = j.first.split("=")
    system "export #{arr[0]}=#{arr[1]}"
    system "env"
    # This line below is also another way but still nothing works
    ENV[arr[0]] = arr[1]
  end
  rake "task:continue_doing_my_task"
end

【问题讨论】:

  • 这不是这样做的方法,没有理由每小时加载相同的环境变量。相反,当您的应用在其环境中启动时,通过 github.com/bkeepers/dotenv 之类的方式启动这些变量
  • 每 1 小时用于测试,部署时为每 1 天,但这不是这里的问题。

标签: ruby-on-rails ruby rubygems rake-task whenever


【解决方案1】:

every-block 中的代码在 whenever --update-crontab 运行时执行,而不是每小时执行一次。

您需要让rake "task:continue_doing_my_task" 生成的命令加载这些变量,或者使用 bash 语法(这很难看)或使用dotenv 内联导出它们,正如@Anthony 的评论中所建议的那样。

请参阅我对您的follow-up question 的回复,其中对此进行了更详细的解释。

【讨论】:

    猜你喜欢
    • 2020-01-01
    • 2021-10-22
    • 1970-01-01
    • 2021-08-29
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    相关资源
    最近更新 更多