2013-06-20 23 views
12

Podczas bundle:install Faza po deploy:finalize_update, otrzymuję komunikat o błędzie nokogiri. To sugeruje,Błąd dotyczący nokogiri podczas wdrażania Capistrano na serwerze Ubuntu

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

więc próbowałem zainstalować nokogiri sam na server.But daje następujący błąd,

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 

To właśnie rozpoczął today.Also libxml2 jest już zainstalowana.

Każdy pomysł?

Dzięki.

EDYCJA: Nie wymagam wyraźnie nokogiri w moim gemfile.

+1

Mam pomysł: przejrzyj "tmp/x86_64-linux-gnu/ports/libxml2/2.8.0/compile.log", aby zobaczyć, co się stało. –

+1

:) plik nie istnieje –

+0

Dodałem nokogiri do mojego pliku gem i jego rozwiązanie. Ale ostrzega mnie. OSTRZEŻENIE: Nokogiri zostało zbudowane w oparciu o bibliotekę LibXML w wersji 2.9.1, ale zostało załadowane dynamicznie 2.8.0 –

Odpowiedz

37

Napotkałem ten sam problem z Nokogiri 1.6.0. Problem, jak widać z dzienników, jest spowodowany nieudaną kompilacją biblioteki libxml2, która wraz z libxslt jest teraz umieszczana w klejnocie i kompilowana podczas instalacji.

Aby dowiedzieć się, co dokładnie się stało z kompilacji, przyjrzeć się proponowanej pliku compile.log, że w twoim przypadku, można znaleźć pod adresem:

/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 

jako obejście (zakładając, masz zainstalowane libxml2-dev i libxslt-dev), możesz to zrobić:

NOKOGIRI_USE_SYSTEM_LIBRARIES=1 bundle install 

Mam nadzieję, że to pomoże.

+0

Dzięki za obejście problemu! Myślę, że jest to dla mnie zdecydowanie problem homebrew, ale nie mam czasu na poprawkę Google-Fu. – engineerDave

+0

Ty obejście pracował dla mnie też. ale wciąż daje mi ostrzeżenie. jakiś otwarty problem na ten temat? może możemy do niego dołączyć to pytanie. –

+1

Należy rozszerzyć o odpowiedź z @tiago – nunopolonia

0

podstawie @zekus odpowiedź, stworzyłem nowe zadanie w Kapistrana takiego:

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" 

ten pracował dla mnie całkiem dobrze.

11

Jeśli używasz Capistrano 3.x można wykonać następujące czynności w deploy.rb plik (lub pliku określonego środowiska tj deploy/production.rb)

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

W ten sposób można uniknąć nadrzędne zadanie bundle install. Spowoduje to ustawienie podanych zmiennych env podczas uruchamiania bundle install.

0

Połącz się host z użytkownikiem Deployer, niż próbować zainstalować pakiet przez siebie:

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 

niż run Kapistrana ręcznie.

To zadziałało dla mnie.

Powiązane problemy