2012-05-14 4 views
2

Я развертываю приложение Ruby on Rails и NodeJS с использованием Capistrano. Папка uploads удаляется при каждом развертывании.Capistrano и Carrierwave

Это выскочило в нескольких местах, но это не похоже на работу:

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

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

репо:

repo: 
    /node 
    /rails 

Спасибо!

ответ

2

Убедитесь, что вы удалите существующие государственные/загрузки папка, прохождение -f до ln не распространяется на удаление целевых каталогов (или, по крайней мере, для этого не удалось переносить)

My s ymlink каталоги задачи обычно выглядят как

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

Очевидно убедитесь, что нет ничего в проверяемых в версии общественного/загрузки, что вам нужно!

+0

nope. не работает. может, мне нужно добавить другие вещи? это хороший подход – CamelCamelCamel

+0

имел проблемы с разрешениями, делал -nFs, а также удалял папку uploads из репо. даст вам щедрость, когда смогу. – CamelCamelCamel

1

ли вы попробовать

after 'deploy:update_code', ':symlink_uploads' 

Ваша :symlink_uploads задача не в пространстве имен, так что скорее сделать выше или положить его в пространстве имен

namespace :deploy do 
    task :symlink_uploads do 
    # ... 
    end 
end 
+0

Я сделал, код находится внутри пространства имен развертывания. – CamelCamelCamel

+0

Хорошо, извините - думал, что это было слишком просто :) – Vapire

3

Существует еще одно решение этой проблемы. Вы можете добавить свой uploads dir в Capistrano's shared_children, и он сделает все волшебство автоматически. Вы можете найти более подробную информацию в этом ответе: https://stackoverflow.com/a/9710542/835935

+0

Я тоже пробовал. Это сработало бы, если бы рельсы были в корне репо. журнал и система используют это, и я подозреваю, что их символическая ссылка тоже не работает. – CamelCamelCamel

0

У меня есть аналогичная проблема с загруженным файлом с моим приложением RoR. Это мое Capistrano задача:

... 
task :link_public_folder, :roles => [:app, :web] do 
    run "mv -u #{release_path}/public/* #{shared_path}/public" 
    run "rm -rf #{release_path}/public" 
    run "ln -s #{shared_path}/publiC#{release_path}/public" 
    end 
    after "deploy:update", "deploy:link_public_folder" 

    task :setup_config, :roles => :app do 
    sudo "ln -nfs #{current_path}/config/apache.conf /etc/apache2/sites-available/#{application}" 
    run "mkdir -p #{shared_path}/config" 
    run "mkdir -p #{shared_path}/public" 
    put File.read("config/database.yml"), "#{shared_path}/config/database.yml" 
    puts "Now edit the config files in #{shared_path}." 
    end 
    after "deploy:setup", "deploy:setup_config" 
... 

Может помочь вам

Edit: Я тоже использовать Carrierwave.

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