2013-06-20 1 views
12

Alors que bundle:install phase après deploy:finalize_update, je reçois une erreur à propos de nokogiri. Il suggère,Erreur sur nokogiri lors du déploiement de Capistrano sur le serveur Ubuntu

** [out :: *******] Make sure that `gem install nokogiri -v '1.6.0'` succeeds before bundling. 

donc j'ai essayé d'installer nokogiri par moi-même sur server.But il donne l'erreur suivante,

Building native extensions. This could take a while... 
ERROR: Error installing nokogiri: 
    ERROR: Failed to build gem native extension. 

    /home/deployer/.rvm/rubies/ruby-2.0.0-p0/bin/ruby extconf.rb 
Extracting libxml2-2.8.0.tar.gz into tmp/x86_64-linux-gnu/ports/libxml2/2.8.0... OK 
Running 'configure' for libxml2 2.8.0... OK 
Running 'compile' for libxml2 2.8.0... ERROR, review 'tmp/x86_64-linux-gnu/ports/libxml2/2.8.0/compile.log' to see what happened. 
*** extconf.rb failed *** 
Could not create Makefile due to some reason, probably lack of necessary 
libraries and/or headers. Check the mkmf.log file for more details. You may 
need configuration options. 

Provided configuration options: 
    --with-opt-dir 
    --without-opt-dir 
    --with-opt-include 
    --without-opt-include=${opt-dir}/include 
    --with-opt-lib 
    --without-opt-lib=${opt-dir}/lib 
    --with-make-prog 
    --without-make-prog 
    --srcdir=. 
    --curdir 
    --ruby=/home/deployer/.rvm/rubies/ruby-2.0.0-p0/bin/ruby 
/home/deployer/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/gems/2.0.0/gems/mini_portile-0.5.0/lib/mini_portile.rb:235:in `block in execute': Failed to complete compile task (RuntimeError) 
    from /home/deployer/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/gems/2.0.0/gems/mini_portile-0.5.0/lib/mini_portile.rb:227:in `chdir' 
    from /home/deployer/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/gems/2.0.0/gems/mini_portile-0.5.0/lib/mini_portile.rb:227:in `execute' 
    from /home/deployer/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/gems/2.0.0/gems/mini_portile-0.5.0/lib/mini_portile.rb:61:in `compile' 
    from /home/deployer/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/gems/2.0.0/gems/mini_portile-0.5.0/lib/mini_portile.rb:101:in `cook' 
    from extconf.rb:101:in `block in <main>' 
    from extconf.rb:119:in `call' 
    from extconf.rb:119:in `block in <main>' 
    from extconf.rb:109:in `tap' 
    from extconf.rb:109:in `<main>' 


Gem files will remain installed in /home/deployer/.rvm/gems/ruby-2.0.0-p0/gems/nokogiri-1.6.0 for inspection. 
Results logged to /home/deployer/.rvm/gems/ruby-2.0.0-p0/gems/nokogiri-1.6.0/ext/nokogiri/gem_make.out 

Il vient de commencer today.Also libxml2 est déjà installé.

Une idée?

Merci.

EDIT: Je n'ai pas besoin explicitement de nokogiri dans mon gemfile.

+1

J'ai une idée: passez en revue 'tmp/x86_64-linux-gnu/ports/libxml2/2.8.0/compile.log' pour voir ce qui s'est passé. –

+1

:) fichier n'existe pas –

+0

J'ai ajouté nokogiri à mon fichier gem et son résolu. Mais me donne un avertissement. AVERTISSEMENT: Nokogiri a été construit avec la version 2.9.1 de LibXML, mais a chargé dynamiquement 2.8.0 –

Répondre

37

J'ai rencontré le même problème avec Nokogiri 1.6.0. Le problème, comme vous pouvez le voir dans les journaux, est dû à une compilation ratée de libxml2 qui, avec libxslt, est désormais intégrée dans la gemme et compilée lorsque vous l'installez.

Pour savoir exactement ce qui a mal tourné avec la compilation, consultez le fichier suggéré de compile.log que, dans votre cas, vous pouvez trouver à:

/home/deployer/.rvm/gems/ruby-2.0.0-p0/gems/nokogiri-1.6.0/ext/nokogiri/tmp/x86_64-linux-gnu/ports/libxml2/2.8.0/compile.log 

Pour contourner ce problème (en supposant vous avez libxml2-dev et libxslt-dev), vous pouvez faire:

NOKOGIRI_USE_SYSTEM_LIBRARIES=1 bundle install 

J'espère que ça aide.

+0

Merci pour la solution de contournement! Je pense que c'est définitivement un problème homebrew pour moi, mais pas de temps pour Google-Fu le correctif. – engineerDave

+0

vous avez travaillé pour moi aussi. mais me donnant toujours un avertissement. une question ouverte à ce sujet? peut-être pouvons-nous attacher cette question à cela. –

+1

Il devrait être étendu pour inclure la réponse de @tiago – nunopolonia

0

Sur la base de réponse @zekus, je crée une nouvelle tâche à Capistrano comme ceci:

task :custom_bundle_install, roles: :app do 
    run "cd /home/#{user}/apps/#{application}/releases/#{release_name} && NOKOGIRI_USE_SYSTEM_LIBRARIES=1 bundle install --gemfile /home/#{user}/apps/#{application}/releases/#{release_name}/Gemfile --path /home/#{user}/apps/#{application}/shared/bundle --deployment --quiet --without development test" 
    end 
    before "bundle:install", "deploy:custom_bundle_install" 

Cela a fonctionné pour moi assez bien.

11

Si vous utilisez 3.x Capistrano vous pouvez effectuer les opérations suivantes dans votre fichier deploy.rb (ou environnement fichier spécifique à savoir deploy/production.rb)

set :bundle_env_variables, { 'NOKOGIRI_USE_SYSTEM_LIBRARIES' => 1 } 

De cette façon, vous évitez la tâche primordial bundle install. Cela définira les variables env données lors de l'exécution bundle install.

0

Connectez-vous à vous hébergez avec l'utilisateur deployer, que d'essayer par vous-même installer bundle:

cd {your last release path} 
bundle config build.nokogiri --with-xml2-include=/usr/include/libxml2/libxml 
bundle install --gemfile Gemfile --path shared/bundle --deployment --quiet --without development test 

que de courir Capistrano manuellement.

Cela a fonctionné pour moi.

Questions connexes