Сохранение статических файлов на сервере при развертывании с помощью Capistrano
-
06-07-2019 - |
Вопрос
Я загружаю файлы на свой public/files
папку приложения Rails на постоянной основе через веб-интерфейс.
Я не хочу хранить их в системе контроля версий, поскольку они занимают почти 2 ГБ, поэтому каждый раз, когда я делаю cap deploy
он сохранит эти файлы в releases/
и замените каталог исходной копией, хранящейся в репозитории.
Мне интересно, как лучше всего хранить эти файлы на сервере, в current
каталог.Некоторые из моих идей:
- Удалите каталог из системы управления версиями и замените его ссылкой на внешний каталог, которым не управляет Capistrano.
- Создайте задачу Capistrano, чтобы скопировать каталог в /tmp перед развертыванием, а затем скопировать его обратно в /public после завершения развертывания.
Есть ли стандартный способ сделать это?
Решение
Вы можете сделать файлы символической ссылкой на другой каталог на вашем компьютере, например, каталог /shared на том же уровне, что и /current и /releases.
Проверьте, что capistrano управляет каталогами /log и /tmp.
Другие советы
На будущее, это задача, которую я использовал для общего каталога:
task :link_shared_directories do
run "ln -s #{shared_path}/files #{release_path}/public/files"
end
after "deploy:update_code", :link_shared_directories
Теперь мы можем просто использовать :linked_files в Deploy.rb:
set :linked_files, %w{config/database.yml}
В этом случае файл [target_dir]/shared/config/database.yml должен существовать на сервере.