Сохранение статических файлов на сервере при развертывании с помощью Capistrano

StackOverflow https://stackoverflow.com/questions/263026

Вопрос

Я загружаю файлы на свой 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 должен существовать на сервере.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top