Сбой задания Rake с `source: not found` на Heroku

У меня есть Rails-проект с граблями update_data, который заключается в следующем:

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, Что мне делать, чтобы source доступен на Heroku?

2 ответа

Решение

Сообщение об ошибке sh: 1: source: not found Значит это:

  1. ты бежишь sh вместо bash,
  2. source не является встроенной командой, и оболочка не может найти source в PATH,

Чтобы подтвердить этот прогон heroku run sh, тип source и сравнить вывод с попыткой выполнить foobar,

Я рекомендую вам попробовать передать команду bash (через `bash -c " ваша команда идет сюда "). Вам также может понадобиться пакет сборки Python. Вы можете добавить его с помощью:

heroku buildpacks:add heroku/python

Я чувствую, что вам не нужно активировать свой 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
Другие вопросы по тегам