【问题标题】:Setting env variable to a cron scheduled task using whenever gem使用每当 gem 将 env 变量设置为 cron 计划任务
【发布时间】:2016-05-26 08:30:25
【问题描述】:

在下面的代码中,我想设置一些存储在文件中的环境变量。我错过了什么吗?在“bundle execwhen”之后在生产中打印 env 不显示环境变量集。将无论何时 gem 用于计划的 cron 任务并花费数小时来解决这个问题。也可以建议任何其他方式。

every 1.day, :at => '2:30 am' do
  # Run shell script to assign variables and continue the rake task
  system "for line in `cat config/myEnvFile.env` ; do export $line ; done"
  rake "task:continue_doing_my_task"
end

【问题讨论】:

    标签: ruby cron rake-task whenever


    【解决方案1】:
    1. system 不是任何时候的工作类型。它是Kernel.system,它在每次运行命令时执行传递给它的字符串,而不是将该字符串转换为 cron 语法。看起来你真正的意思是:

      command "for line in `cat config/myEnvFile.env` ; do export $line ; done"
      # Note: command instead of system
      

      command 是由 here 定义的内置作业类型。

    2. every-block 中的每一行代码都作为它自己的命令运行。如果你运行whenever(没有任何参数,所以它只是显示它放入你的crontab中而不实际修改crontab,并且在进行了我上面描述的更正之后),你会看到输出是这样的:

      30 2 * * * * /bin/bash -l -c 'for line in `cat config/myEnvFile.env` ; do export $line ; done'
      30 2 * * * * /bin/bash -l -c 'cd /path/to/project && RAILS_ENV=production bundle exec rake task:continue_doing_my_task --silent > my_log_file.log 2&>1'
      

      通知 2 问题:

      1. 首先,这两个命令彼此无关——它们作为两个完全独立的进程运行。

      2. 第一个运行在 cron 的默认目录中,这可能不是 config/myEnvFile.env 所在的位置。

      要解决此问题,您需要将所有内容合并到一个命令中。通过使用任何时候的 rake 作业类型,您最终进入正确的目录,但您仍然以某种方式导出所有这些变量。

      一种方法是重命名文件.ruby-env 并使用rvm。 rvm除了为你管理ruby版本外,还会在你进入目录时自动加载.ruby-env中定义的所有环境变量。

      如果 RVM 不适合您,或者您想要更轻量级的东西,请将文件重命名为 .env 并使用 dotenv。他们的 README 文档准确地记录了如何通过或 without Rails 使用 gem。没有 Rails,就这么简单:

      • 将 dotenv 添加到您的 Gemfile 中
      • 对您的 Rakefile 进行此更改:

        require 'dotenv/tasks' # 1. require this file
        namespace :task
          task continue_doing_my_task: :dotenv do # 2. make :dotenv a prerequisite for your task
        

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-04
      • 2017-04-26
      • 1970-01-01
      • 2013-08-18
      • 1970-01-01
      • 2012-05-27
      • 1970-01-01
      相关资源
      最近更新 更多