7
votes

Production de rails - Toutes les images sont cassées après le nouveau déploiement

J'ai suivi le Screencast de Ryan et déployé à VPS. J'utilise donc Unicorn + Nginx + Github + Ubuntu 12.04 LTS + Capistrano. J'utilise aussi I18N pour traduire l'application.

Je voudrais aussi remarquer que j'utilise Carriakrewave pour la photo Téléchargement. CARAIRAIREWAVE garde des photos sur VPS localement. Lorsque je télécharge des images, il fonctionne bien et que les images téléchargées apparaissent. P>

mais chaque fois que je déploie de nouvelles modifications sur le serveur, toutes mes photos sont cassées. C'est vraiment terrible. J'ai essayé manuellement de redémarrer nginx: p> xxx pré>

et j'ai essayé de redémarrer Unicorn: p> xxx pré>

Ça n'aide pas aussi . P>

Lorsque j'essaie d'ouvrir ma page cassée manuellement, il dit: p> xxx pré>

lorsque j'essaie de trouver des images dans la console: P>

require "bundler/capistrano"

server "my_ip_here", :web, :app, :db, primary: true

set :application, "My_app"
set :user, "deployer"
set :deploy_to, "/home/#{user}/apps/#{application}"
set :deploy_via, :remote_cache
set :use_sudo, false

set :scm, "git"
set :repository, "git@github.com:MyName/#{application}.git"
set :branch, "master"

default_run_options[:pty] = true
ssh_options[:forward_agent] = true

after "deploy", "deploy:cleanup" # keep only the last 5 releases

namespace :deploy do
  %w[start stop restart].each do |command|
    desc "#{command} unicorn server"
    task command, roles: :app, except: {no_release: true} do
      run "/etc/init.d/unicorn_#{application} #{command}"
    end
  end

  task :setup_config, roles: :app do
    sudo "ln -nfs #{current_path}/config/nginx.conf /etc/nginx/sites-enabled/#{application}"
    sudo "ln -nfs #{current_path}/config/unicorn_init.sh /etc/init.d/unicorn_#{application}"
    run "mkdir -p #{shared_path}/config"
    put File.read("config/database.example.yml"), "#{shared_path}/config/database.yml"
    puts "Now edit the config files in #{shared_path}."
  end
  after "deploy:setup", "deploy:setup_config"

  task :symlink_config, roles: :app do
    run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml"
  end
  after "deploy:finalize_update", "deploy:symlink_config"

  desc "Make sure local git is in sync with remote."
  task :check_revision, roles: :web do
    unless `git rev-parse HEAD` == `git rev-parse origin/master`
      puts "WARNING: HEAD is not the same as origin/master"
      puts "Run `git push` to sync changes."
      exit
    end
  end
  before "deploy", "deploy:check_revision"
end


0 commentaires

3 Réponses :


8
votes

OK, j'ai trouvé la solution. Le problème est apparu parce que je n'ai pas changé le dossier par défaut pour conserver des images. Vous pouvez trouver votre dossier par défaut dans public / uploads code>. Cela signifie que chaque capaclacs déployé code> créera un nouveau dossier vide qui ne contient pas vos fichiers plus anciens.

Pour résoudre ce problème, vous devez créer un autre dossier qui ne vit pas dans votre application. Je choisis le moyen le plus simple. J'ai créé Symlinlk. P>

Mes étapes: p>

1) sur votre serveur Allez dans le dossier partagé de votre application (il généré automatiquement via Capistrano). Puis créez votre dossier pour conserver de nouvelles images: p> xxx pré>

2) donne les droits nécessaires à un dossier créé: p> xxx pré>

3) Sur votre ordinateur local dans config / déployable.rb Ajouter: P>

$ git push
$ cap deploy:symlink
$ cap deploy


1 commentaires

Hey, je sais, beaucoup de temps ont passé, mais j'ai le même problème. Et à propos de vos pas. Je ne comprends pas, dans votre première étape, pourquoi devons-nous créer un dossier s'il est automatiquement créé?



2
votes

bon! J'ai étendu votre recette Capistrano.

# config/recipes/carrierwave.rb

namespace :carrierwave do 
  task :uploads_folder do
    run "mkdir -p #{shared_path}/uploads"
    run "#{sudo} chmod 775 #{shared_path}/uploads"
  end
  after 'deploy:setup', 'carrierwave:uploads_folder'

  task :symlink do 
    run "ln -nfs #{shared_path}/uploads #{release_path}/public/uploads"
  end
  after 'deploy', 'carrierwave:symlink'
end


0 commentaires

0
votes

@exire & @charlie Réponse fonctionne sur Capistrano 2.x. Dans Capistrano 3.x, commande exécutée remplacée par la commande exécutée .

Alors, j'ai résolu ceci avec les étapes suivantes:

  1. Créer un fichier Rake dans le répertoire LIB / CAPISSISRANO / TÂCHES / CORPERWAVE.RAKE Avec le contenu: xxx
    1. ajoutez la ligne suivante à la fin de votre capfile si cela ne l'a pas. dir.glob ('lib / capistrano / tâches / *. Rake'). Chaque {| r | Importer r}

    2. ajoutez ces tâches dans config / déployé.rb avec d'autres tâches.

      • après "Déployer: Publishing", 'Carrierwave: Uploads_Folder'
      • après "Déployer: Publishing", "Carrierwave: Symlink ' xxx
        1. poussez git et déployez

          Votre image téléchargée restera enregistrée dans partagée / téléchargements après un nouveau déploiement.


0 commentaires