Carrierwave файлы с Capistrano - PullRequest
       25

Carrierwave файлы с Capistrano

25 голосов
/ 28 января 2012

Я использую rails 3.2 с активом и carrierwave для загрузки некоторых изображений, они хранятся в / public / uploads / photo / ..... но когда я делаю cap: deploy (с capistrano), мое текущее приложение каталога не содержит загруженных файлов, потому что capistrano делает новую версию ....

=== Обновление ===

Ведь я использую это:

внутри: развернуть пространство имен

   task :symlink_uploads do
     run "ln -nfs #{shared_path}/uploads  #{release_path}/public/uploads"
   end

и после:

after 'deploy:update_code', 'deploy:symlink_uploads'

=== Повторное обновление ===

Решение @tristanm - лучший способ решить эту проблему.

Ответы [ 5 ]

65 голосов
/ 15 марта 2012

Как насчет этого:

# config/deploy.rb
set :shared_children, shared_children + %w{public/uploads}

:shared_children по умолчанию %w(public/system log tmp/pids), поэтому мы просто расширяем этот список.

РЕДАКТИРОВАТЬ:

Не забудьте запустить cap deploy:setup после изменения :shared_children, чтобы новые цели создавались в shared.

РЕДАКТИРОВАТЬ Capistrano 3:

Capistrano 3 использует настройку linked_dirs и больше не определяет public/system по умолчанию.

set :linked_dirs, fetch(:linked_dirs) + %w{public/system public/uploads}

5 голосов
/ 07 марта 2014

С Capistrano 3 и без необходимости повторного развертывания.

Как упомянуто @tristanm, добавьте это в ваш config / deploy.rb

# config/deploy.rb
set :linked_dirs, fetch(:linked_dirs) + %w{public/uploads}

Чтобы capistrano мог создать общий / публичный доступ / загрузить

cap deploy:check:linked_dirs

Теперь cap может создавать символическую ссылку

cap deploy:symlink:shared

Наконец, если у вас есть резервные копии загрузок, вы можете поместить их в shared / public / uploads /, и они должны работать без необходимости повторного развертывания.

4 голосов
/ 28 января 2012

Capistrano создает новый каталог для каждого развертывания.

Есть некоторые исключения из этого. Например, файлы журналов распределяются между каталогами развертывания, потому что они являются просто символическими ссылками. Вы также должны создать символическую ссылку для публичной загрузки / загрузки.

Вот команда:

run <<-CMD
  rm -rf #{latest_release}/public/uploads &&
  ln -s #{shared_path}/uploads #{latest_release}/public/uploads
CMD
0 голосов
/ 08 марта 2016

Используя Capistrano 3, я просто добавил эту строку в мой config / deploy.rb

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

Затем запустите:

$ cap production deploy
0 голосов
/ 25 июля 2014

Перейдите в общую папку вашего сервера приложений и создайте каталог для выгрузки.

mkdir uploads

В файле deploy.rb вставьте эти коды при развертываниипространство имен

задача: symlink_uploads do

run "rm -rf # {latest_release} / public / uploads && ln -nfs # {shared_path} / uploads # {latest_release} / public /uploads "

end

после 'deploy: update_code', 'deploy: symlink_uploads'

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

...