Подтвердить что ты не робот

Файлы Carrierwave с Capistrano

Я использую rails 3.2 с активностью и несущей для загрузки некоторых изображений, они хранят в /public/uploads/photo/..... но когда я делаю кепку: 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'

=== Re Update ===

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

4b9b3361

Ответ 1

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

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

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

EDIT:

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

EDIT Capistrano 3:

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

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

Ответ 2

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

Подобно @tristanm, добавьте это в свой config/deploy.rb

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

Чтобы создать capistrano для создания общих/общедоступных/uploads

cap deploy:check:linked_dirs

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

cap deploy:symlink:shared

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

Ответ 3

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

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

Вот команда:

run <<-CMD
  rm -rf #{latest_release}/public/uploads &&
  ln -s #{shared_path}/uploads #{latest_release}/public/uploads
CMD

Ответ 4

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

Загрузка mkdir

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

задача: symlink_uploads do

запустить "rm -rf # {last_release}/public/uploads && ln -nfs # {shared_path}/uploads # {last_release}/public/uploads

конец

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

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

Ответ 5

Используя 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