Как я могу запретить capistrano перезаписывать файлы, загруженные пользователями в их собственных папках? - PullRequest
7 голосов
/ 03 апреля 2010

Я использую Capistrano и git для развертывания приложения RoR. У меня есть папка, под которой у каждого пользователя своя папка. Когда пользователь загружает или сохраняет файл, он сохраняется в своей папке.

Когда я развертываю новые версии кода на сервере, пользовательские файлы и папки перезаписываются содержимым моего компьютера разработчика.

Есть ли способ игнорировать некоторые папки в capistrano, как мы делаем в git? В этом посте - http://www.ruby -forum.com / topic / 97539 - предлагается использовать символические ссылки и хранить пользовательские файлы в общей папке. Но это старый пост, поэтому мне интересно, есть ли лучший способ сделать это сейчас.

Кроме того, кто-нибудь знает какие-либо хорошие скринкасты / учебники, которые можно порекомендовать для использования RoR + git + capistrano?

Спасибо.

Ответы [ 2 ]

10 голосов
/ 03 апреля 2010

Вы должны переместить папки пользователя за пределы каталога releases Capistrano. Обычный подход заключается в том, чтобы Capistrano создавал символические ссылки на каталоги, которые должны сохраняться при развертывании.

Вот пример из config/deploy.rb моего блогового приложения Rails, в котором файлы для загрузки в сообщениях блога и изображения, используемые в сообщениях, хранятся в каталоге shared:

after :deploy, 'deploy:link_dependencies'

namespace :deploy do
  desc <<-DESC
    Creates symbolic links to configuration files and other dependencies
    after deployment.
  DESC
  task :link_dependencies, :roles => :app do
    run "ln -nfs #{shared_path}/public/files #{release_path}/public/files"
    run "ln -nfs #{shared_path}/public/images/posts #{release_path}/public/images/posts"
  end
end
  • Чтобы ответить на ваш второй вопрос, я рекомендую PeepCode и Railscasts
0 голосов
/ 16 ноября 2016

Это слишком поздно, но я столкнулся с этой проблемой. Я использую рельсы 5 и Capistrano 3.6. Я решил эту проблему, создав символическую ссылку на общую папку.

Возможно, эта строка уже есть в вашем deploy.rb

set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle}

Если вы хотите сохранить изображения пользователя в public / images / user_images и поместить их в общую папку, добавьте имя папки с пробелом (например, так):

set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/images/user_images}

Теперь запустите cap production deploy, и вы сможете получить доступ к изображениям в общей папке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...