2013-06-20 14 views
12

Mentre bundle:install fase dopo deploy:finalize_update, ricevo un errore su nokogiri. Suggerisce,Errore su nokogiri durante la distribuzione di capistrano su server ubuntu

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

Così ho provato ad installare nokogiri da solo sul server.But dà seguente errore,

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 

E 'appena iniziato today.Also libxml2 è già installato.

Qualche idea?

Grazie.

MODIFICA: Non ho bisogno esplicitamente di nokogiri nel mio gemfile.

+1

Ho un'idea: rivedere 'tmp/x86_64-linux-gnu/ports/libxml2/2.8.0/compile.log' per vedere cosa è successo. –

+1

:) il file non esiste –

+0

Ho aggiunto nokogiri al mio file gem e il suo risolto. Ma mi dà un avvertimento. ATTENZIONE: Nokogiri è stato costruito contro LibXML versione 2.9.1, ma ha caricato dinamicamente 2.8.0 –

risposta

37

Ho affrontato lo stesso problema con Nokogiri 1.6.0. Il problema, come puoi vedere dai log, è causato da una compilazione fallita di libxml2 che, insieme a libxslt, è ora inclusa nella gemma e compilata al momento dell'installazione.

Per scoprire cosa esattamente è andato storto con la compilazione, hanno uno sguardo al file suggerito compile.log che, nel suo caso, si possono trovare presso:

/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 

Come soluzione alternativa (supponendo avete libxml2-dev e libxslt-dev installato), si può fare:

NOKOGIRI_USE_SYSTEM_LIBRARIES=1 bundle install 

spero che aiuta.

+0

Grazie per la soluzione! Penso che sia sicuramente un problema di homebrew per me, ma non ho tempo per Google-Fu la soluzione. – engineerDave

+0

hai lavorato anche per me. ma mi sta ancora avvertendo. qualche problema aperto su questo? forse possiamo allegare questa domanda ad esso. –

+1

Dovrebbe essere espanso per includere la risposta di @tiago – nunopolonia

0

in base alla risposta @zekus, ho creato una nuova attività a Capistrano in questo modo:

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" 

Questo per me ha funzionato abbastanza bene.

11

Se stai usando Capistrano 3.x è possibile effettuare le seguenti operazioni nel deploy.rb di file (o file specifico ambiente cioè deploy/production.rb)

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

In questo modo si evita l'override del compito bundle install. Ciò imposterà le variabili date env quando si esegue bundle install.

0

Connect to si ospita con l'utente deployer, che cercare installare pacco da soli:

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 

Than corsa Capistrano manualmente.

Questo ha funzionato per me.