2012-01-28 5 views
25

Я использую rails 3.2 с активными и несущими для загрузки некоторых изображений, они хранят в/public/uploads/photo/..... , но когда я делаю кепку: разворачиваю (с capistrano) мое текущее приложение каталог не содержат файлы, которые я загружен, потому что Capistrano сделать новую версию ....Файлы Carrierwave с 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 это лучший способ решить эту проблему.

+0

хорошо, как вы могли видеть, решение не в ответы ... Итак, я не знаю, есть ли у меня выбор. – eveevans

+0

Используйте 'deploy: finish' для Capistrano 3+ –

ответ

65

Как об этом:

# 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}

+0

Создала папку uploads внутри shared, но файлы там не сохраняются. я пропустил шаг? – leonel

+1

Может быть, символические ссылки не были созданы. Запустите 'cap deploy' снова и проверьте, что' релизы/current/public/uploads' является символической ссылкой на 'shared/uploads'. Кроме того, убедитесь, что вы не используете действительно древнюю версию Capistrano. – tristanm

+0

Я думаю, что ваше решение выглядит великолепно, но на самом деле я этого не пробовал, поэтому для количества голосов UP я дам вам «принять». Спасибо – eveevans

4

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

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

Вот команда:

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

Где я помещаю этот код? и как я его использую? Заранее спасибо – eveevans

+0

Должен ли я поставить это в задачу Капистрано? – eveevans

+0

Хорошо, спасибо, я использовал часть вашего кода для своего решения. – eveevans

5

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

Как упоминалось в @tristanm, добавьте это в свою конфигурацию/развертывание.гь

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

Чтобы Capistrano создавать общие/общественные/загрузки

cap deploy:check:linked_dirs

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

cap deploy:symlink:shared

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

+0

Спасибо Джейсон, я попробую это на Капистрано 3. – eveevans

0

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

MKDIR загрузка

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

задача: symlink_uploads сделать

пробега «ет -rf # {latest_release}/Public/дату загрузки & & ln -nfs # {shared_path}/uploads # {latest_release}/public/uploads "

конец

после «развертывания: update_code», «развернуть: symlink_uploads»

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

0

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

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

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

$ cap production deploy 
Смежные вопросы