2013-06-20 14 views
12

Während bundle:install Phase nach deploy:finalize_update, bekomme ich einen Fehler über Nokogiri. Er schlägt vor,Fehler über Nokogiri während Capistrano Bereitstellung auf Ubuntu-Server

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

Also versuchte ich allein auf server.But zu installieren nokogiri es folgende Fehler gibt,

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 

Es begann gerade today.Also libxml2 ist bereits installiert.

Irgendeine Idee?

Danke.

EDIT: Ich brauche nicht explizit Nokogiri in meiner gemfile.

+1

Ich habe eine Idee: Überprüfen Sie 'tmp/x86_64-linux-gnu/ports/libxml2/2.8.0/compile.log', um zu sehen, was passiert ist. –

+1

:) Datei existiert nicht –

+0

Ich habe Nokogiri zu meiner Edelstein-Datei hinzugefügt und es ist gelöst. Aber gibt mir eine Warnung. WARNUNG: Nokogiri wurde gegen LibXML Version 2.9.1 gebaut, aber hat 2.8.0 –

Antwort

37

Ich konfrontiert das gleiche Problem mit Nokogiri 1.6.0. Wie Sie anhand der Logs sehen können, ist das Problem auf eine fehlgeschlagene Kompilierung von libxml2 zurückzuführen, die zusammen mit libxslt jetzt in das Gem eingebettet und bei der Installation kompiliert wird.

Um herauszufinden, was genau mit der Zusammenstellung schief gelaufen ist, haben Sie einen Blick auf der vorgeschlagene Datei compile.log, die in Ihrem Fall, finden Sie unter:

/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 

Als Abhilfe kann (vorausgesetzt, Sie libxml2-dev und libxslt-dev installiert) haben, können Sie tun:

NOKOGIRI_USE_SYSTEM_LIBRARIES=1 bundle install 

ich hoffe, es hilft.

+0

dynamisch geladen Danke für die Problemumgehung! Ich denke, es ist definitiv ein Homebrew-Problem für mich, aber keine Zeit für Google-Fu die Lösung. – engineerDave

+0

Sie Workaround funktionierte auch für mich. aber immer noch warnend. Irgendwelche offenen Fragen dazu? Vielleicht können wir diese Frage anhängen. –

+1

Es sollte erweitert werden, um die Antwort von @tiago einzuschließen – nunopolonia

0

Basierend auf @zekus Antwort, habe ich eine neue Aufgabe in Capistrano wie folgt aus:

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" 

Diese ziemlich gut für mich gearbeitet.

11

Wenn Sie Capistrano 3.x verwenden können Sie die folgenden in Ihrer deploy.rb Datei (oder umgebungsspezifische Datei heißt deploy/production.rb)

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

Sie die bundle install Aufgabe zwingende vermeiden auf diese Weise. Dadurch werden die angegebenen env Variablen beim Ausführen von bundle install festgelegt.

0

Connect Sie mit deployer Benutzer hosten, versuchen Sie als Bundle installieren selbst:

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 

als Lauf Capistrano manuell.

Das funktionierte für mich.

Verwandte Themen