2009-05-12 7 views
2

J'ai un problème en ce moment où nous utilisons un CMS dans un site (browsercms) qui permet à l'utilisateur de télécharger des fichiers. Cependant, chaque fois que je fais un déploiement, Capistrano exécute une réinitialisation matérielle, ce qui nuke tous les fichiers téléchargés .Déployer depuis Git en utilisant Capistrano sans réinitialisation matérielle?

Est-ce que quelqu'un a des suggestions sur la façon d'empêcher la réinitialisation matérielle, et juste faire un pull, ou une façon de déplacer les fichiers téléchargés ailleurs, sans avoir à changer le code de l'application?

Répondre

2

Cela peut ne pas être la bonne approche.

Vous devez inclure votre dossier 'images' dans votre .gitignore et créer un lien symbolique entre le dossier $ current_release/images et $ shared/images.

Cela peut être fait automatiquement à chaque déploiement si vous mettez dans votre deploy.rb:

task :link_imgs do  
    run "ln -s #{shared_path}/photos #{release_path}/photos" 
end  

after "deploy:update_code", :link_imgs 

Je l'ai fait la même chose avec mon CMS et cela fonctionne comme un charme

2

Cela ne répond pas tout à fait à vos critères «sans avoir à changer le code de l'application».

Cependant après l'exécution d'un problème similaire, je bougeais mon image téléchargée /public/images-/public/system/images le répertoire /public/system n'est pas « versionné » par chaque déploiement de Capistrano de sorte que les images survivre.

Pourrait-il être le «versioning» capistrano provoquant le problème (au lieu d'une réinitialisation git)?

+0

Ah oui, vous pourrait être juste là. Il se peut que je devrais faire en sorte que le répertoire de téléchargement soit partagé. –

+1

Il s'agit de la solution Capistrano préférée, c'est pourquoi elle crée un lien symbolique entre current/public/system et shared/system par défaut. Paperclip et d'autres plugins stockent des choses ici par défaut pour ce rason, aussi. Les modèles gérés par AttachmentFu auront besoin du "upload_path" modifié par modèle. –

0

deploy cap appelle deploy: mise à jour et deploy: redémarrer

deploy: mise à jour fait versioning, substance copie

deploy: restart-ce que le vrai redémarrage, la surcharge à votre convenince, généralement dans votre config/deploy.rb fichier

namespace :deploy do 
    desc "Softly restart the server" 
    task :restart, :roles => :app, :except => { :no_release => true } do 
     my_own.restart_recipe 
    end 
end 
Questions connexes