Активируйте Virtualenv Wrapper с помощью Capistrano

Я пытаюсь развернуть проект Django с помощью Capistrano. Capistrano развертывает код на моем сервере и завершает этапы развертывания.

Но когда я пытаюсь добавить пользовательскую задачу, подобную этой...

task :collect_static do
  on roles(:app) do |host|
    execute "cd #{release_path}/myproject"
    execute "workon myproject"
    execute "./manage.py collectstatic"
  end
end

after "deploy:updated", "collect_static"

Выдает следующую ошибку...

02 bash: workon: command not found

После развертывания, если я вручную подключаюсь по SSH к серверу и запускаю команду workon, все работает нормально (тот же пользователь). Просто Капистрано не узнает его?


person polarcare    schedule 12.09.2018    source источник
comment
Вероятно, проблема с незагрузкой .bashrc или .profile, см. этот ответ. Что возвращает type workon?   -  person con--    schedule 12.09.2018
comment
Да, я пробовал исходный код ~/.bashrc и .profile, но без особого удовольствия. Не уверен, как заставить Капистрано признать это.   -  person polarcare    schedule 12.09.2018
comment
Также может быть, что вы используете execute вместо system. Что возвращает type workon, когда вы вводите его в консоль?   -  person con--    schedule 12.09.2018
comment
type workon возвращает workon — это функция \n workon() {отображаемый код функции}   -  person polarcare    schedule 12.09.2018


Ответы (1)


workon — это не программа, а функция оболочки из virtualenvwrapper. Чтобы bash нашел его, вы должны получить virtualenvwrapper.sh в оболочке.

person phd    schedule 12.09.2018
comment
Переключение с workon на source /path/to/.virtualenvs/myproject/bin/activate работает. Спасибо за помощь. - person polarcare; 12.09.2018