2008-11-04 7 views
6

Я загружаю файлы в папку public/files приложения Rails на постоянной основе через веб-интерфейс.Сохранение статических файлов на сервере при развертывании с помощью Capistrano

Я не хочу держать их в управлении источником, так как они идут почти на 2 ГБ, поэтому каждый раз, когда я делаю cap deploy, он сохранит эти файлы в releases/ и заменит каталог на нетронутую копию, хранящуюся в репозитории ,

Мне интересно, что является лучшим способом сохранить эти файлы на сервере в каталоге current. Некоторые из моих идей:

  • Удалить каталог из источника управления и заменить его ссылкой на внешний каталог, который не управляется Capistrano.
  • Создайте задачу Capistrano, чтобы скопировать каталог в/tmp перед развертыванием, а затем скопировать его обратно в/public после его развертывания.

Есть ли стандартный способ для этого?

ответ

6

Вы можете сделать файлы символическими ссылками на другой каталог на вашем компьютере, например, каталог/shared на том же уровне, что и/current и/релизы.

Отъезд capistrano управляет каталогами/log и/tmp.

7

Для будущей записи, это задача, которую я использовал, чтобы сделать это с помощью общего каталога:

task :link_shared_directories do  
    run "ln -s #{shared_path}/files #{release_path}/public/files" 
end  

after "deploy:update_code", :link_shared_directories 
2

Теперь мы можем просто использовать: linked_files в deploy.rb:

set :linked_files, %w{config/database.yml} 

В этот случай, файл [target_dir] /shared/config/database.yml должен существовать на сервере.

Смежные вопросы