Rake 任务因 Heroku 上的“source: not found”而失败

Rake task failing with `source: not found` on Heroku

我有一个 Rails 项目,其中有一个名为 update_data 的 rake 任务,如下所示:

every 1.day, :at => '2:30 am' do
  root = File.expand_path('../..', __FILE__)
  system("""(source #{root}/data_scripts/venv/bin/activate;
             python #{root}/data_scripts/scripts/main.py;
             deactivate)""")
end

这应该首先激活virtualenv,运行脚本,然后停用virtualenv。 当我 运行 rake update_data 时,这非常有效。但是,当我 运行 heroku run rake update_data 时,它失败并显示 sh: 1: source: not found。我应该怎么做才能在 Heroku 上使用 source

我觉得你不需要激活你的 virtualenv。

只需使用 virtualenv 的 python 可执行文件:

every 1.day, :at => '2:30 am' do
  root = File.expand_path('../..', __FILE__)
  system("#{root}/data_scripts/venv/bin/python #{root}/data_scripts/scripts/main.py")
end

错误信息sh: 1: source: not found表示:

  1. 你 运行 sh 而不是 bash,
  2. source 不是 built-in 命令,shell 无法在 PATH.
  3. 中找到 source

要确认此 运行 heroku run sh,请键入 source 并将输出与尝试执行 foobar.

进行比较

我建议您尝试将命令传递给 bash(通过 `bash -c "your command goes here")。您可能还需要一个 Python buildpack。您可以添加它:

heroku buildpacks:add heroku/python