Я использую Capistrano для развертывания приложения Ruby on Rails на сервере. Все работает до тех пор, пока не будет вызвана установка пакета, и в этом случае я получаю сообщение об ошибке «Кажется, некоторые драгоценные камни отсутствуют в вашем каталоге vendor / cache».
Эта ошибка вызвана тем, что в каталоге vendor / cache репозитория git, из которого клонируется Capistrano, есть несколько драгоценных камней. Я понимаю, что лучшим подходом было бы очистить репозиторий git, но поскольку это не вариант для меня, я бы хотел, чтобы Capistrano удалил каталог vendor / cache на удаленном сервере после клона git, но до вызова пакета. Я выполнил эти шаги вручную и обнаружил, что при удалении каталога вручную пакет выполняется правильно, но я не могу понять, как заставить Capistrano выполнить удаление.
Вот подходящий фрагмент из моего файла deploy.rb:
after "deploy:update_code" do
run "rm -rf #{release_path}/vendor/cache"
end
after "deploy:update_code", "bundle:install"
А вот вывод командной строки
executing `deploy:update_code'
executing locally: "git ls-remote my_git_repository HEAD"
command finished in xxxms
* executing "git clone [snipped for brevity]
servers: ["my_server"]
[my_server] executing command
** [my_server :: out] Error reading response length from authentication socket.
** [my_server :: out]
command finished in xxxms
* executing `deploy:finalize_update'
triggering before callbacks for `deploy:finalize_update'
* executing `bundle:install'
* executing "[snipped for brevity] bundle install [snipped for brevity]"
servers: ["my_server"]
[my_server] executing command
** [out :: my_server] Some gems seem to be missing from your vendor/cache directory.
** [out :: my_server]
** [out :: my_server] Could not find gem-version in any of the sources
** [out :: my_server]
command finished in xxxms
Не похоже run "rm -rf #{release_path}/vendor/cache"
когда-либо запускается. Я использую правильную команду? Есть еще идеи о том, что мне делать?
Мне интересно, не связана ли проблема с порядком выполнения задач; может попробовать следующее?
task :clean_vendor_cache do
run "rm -rf #{release_path}/vendor/cache"
end
before "bundle:install", "clean_vendor_cache"