2012-05-14 4 views
2

Je déploie une application Ruby on Rails et NodeJS en utilisant Capistrano. Le dossier de téléchargement est supprimé à chaque déploiement.Capistrano et Carrierwave

Cette apparue sur plusieurs endroits, mais il ne semble pas fonctionner:

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

repo: 
    /node 
    /rails 

Merci!

Répondre

2

Assurez-vous de supprimer le public/uploads existants dossier, en passant -f à ln ne couvre pas la suppression de répertoires cibles (ou du moins ne l'a pas fait de manière portative pour moi)

Mes s tâches répertoires ymlink regardent normalement comme

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

De toute évidence assurez-vous qu'il n'y a rien dans la version du cochés dans publique/uploads que vous avez besoin!

+0

non. n'a pas fonctionné. peut-être que j'ai besoin d'ajouter d'autres choses? cela semble une bonne approche – CamelCamelCamel

+0

avait des problèmes avec les autorisations, a fait -nFs et a également dû supprimer le dossier de téléchargements de la repo. vous donnera la prime quand je peux. – CamelCamelCamel

1

Avez-vous essayé

after 'deploy:update_code', ':symlink_uploads' 

Votre :symlink_uploads tâche n'est pas dans un espace de noms, donc plutôt faire ce qui précède ou le mettre dans un espace de noms

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

J'ai fait, le code est à l'intérieur de l'espace de noms de déploiement. – CamelCamelCamel

+0

Ok, désolé - pensé que cela aurait été trop facile :) – Vapire

3

Il existe une autre solution à ce problème. Vous pouvez ajouter votre uploads dir à Capistrano shared_children et il fera automatiquement toute la magie. Vous pouvez trouver plus de détails dans cette réponse: https://stackoverflow.com/a/9710542/835935

+0

J'ai aussi essayé ça. Cela aurait marché si les rails étaient à la racine du repo. Le journal et le système l'utilisent, et je soupçonne que leur lien symbolique ne fonctionne pas non plus. – CamelCamelCamel

0

J'ai un problème similaire avec le fichier téléchargé avec mon application RoR. Ce sont mes tâches de 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" 
... 

Peut-être vous aider

Edit: J'utilise Carrierwave aussi.