2013-06-20 2 views
12

Пока bundle:install фаза после deploy:finalize_update, я получаю сообщение об ошибке nokogiri. Это предполагает,Ошибка о nokogiri при развертывании capistrano на сервере ubuntu

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

Так я попытался установить nokogiri сам на server.But дает следующее сообщение об ошибке,

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 

Он только начал today.Also libxml2 уже установлена.

Любая идея?

Спасибо.

EDIT: Мне не требуется явно nokogiri в моем gemfile.

+1

У меня есть идея: просмотрите 'tmp/x86_64-linux-gnu/ports/libxml2/2.8.0/compile.log', чтобы узнать, что произошло. –

+1

:) файл не существует –

+0

Я добавил nokogiri в свой файл gem и его решил. Но предупреждает. ВНИМАНИЕ: Nokogiri был создан против LibXML версии 2.9.1, но динамически загружен 2.8.0 –

ответ

37

Я столкнулся с той же проблемой с Nokogiri 1.6.0. Проблема, как вы можете видеть из журналов, вызвана неудачной компиляцией libxml2, которая вместе с libxslt теперь поставляется встроенной в драгоценный камень и скомпилирована при ее установке.

Чтобы выяснить, что именно пошло не так с компиляции, посмотрите на предложенный файл compile.log, что в вашем случае, вы можете найти по адресу:

/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 

В качестве временного решения (при условии, у вас есть libxml2-DEV и LibXSLT-DEV установлен), вы можете сделать:

NOKOGIRI_USE_SYSTEM_LIBRARIES=1 bundle install 

Я надеюсь, что это помогает.

+0

Спасибо за обходной путь! Я думаю, что это определенно проблема доморощенного для меня, но не время для Google-Фу исправить. – engineerDave

+0

вы обходились мне. но все же предупреждаю. любой открытый вопрос об этом? возможно, мы можем придать этому вопросу этот вопрос. –

+1

Его следует расширить, включив в него ответ от @tiago – nunopolonia

0

основе @zekus ответа, я создал новую задачу в Capistrano так:

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" 

Это работало для меня очень хорошо.

11

Если вы используете Capistrano 3.x вы можете сделать следующее в вашем deploy.rb файла (или окружения конкретного файла т.е. deploy/production.rb)

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

Таким образом, вы избежать переопределения bundle install задачи. Это задает заданные переменные env при запуске bundle install.

0

Подключение к вам хозяйничать с пользователем Deployer, чем попытаться установить пакет самостоятельно:

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 

чем запустить Capistrano вручную.

Это сработало для меня.

Смежные вопросы