Ruby on rails 如何使用Capistrano使用Nokogiri部署Rails应用程序

Ruby on rails 如何使用Capistrano使用Nokogiri部署Rails应用程序,ruby-on-rails,ruby,capistrano,nokogiri,Ruby On Rails,Ruby,Capistrano,Nokogiri,以下是我的软件版本: Ruby:2.2.1 Rails:4.2.0 卡皮斯特拉诺:3.8.1 美洲狮:3.9.1 这是我的档案: require "capistrano/setup" require "capistrano/deploy" require "capistrano/scm/git" install_plugin Capistrano::SCM::Git require "capistrano/rvm" require "capistrano/bundler" require "

以下是我的软件版本:

  • Ruby:2.2.1
  • Rails:4.2.0
  • 卡皮斯特拉诺:3.8.1
  • 美洲狮:3.9.1
这是我的档案:

require "capistrano/setup"
require "capistrano/deploy"
require "capistrano/scm/git"
install_plugin Capistrano::SCM::Git
require "capistrano/rvm"
require "capistrano/bundler"
require "capistrano/rails/assets"
require "capistrano/rails/migrations"
require "capistrano/puma"
install_plugin Capistrano::Puma
config/deploy.rb:

server '192.168.0.1', port: 22, roles: [:web, :app, :db], primary: true

set :application, "testapp"
set :repo_url, "git@github.com:username/testapp.git"
set :user,            'deploy'
set :puma_threads,    [4, 16]
set :puma_workers,    0

set :pty,             true
set :use_sudo,        false
set :stage,           :production
set :deploy_via,      :remote_cache
set :deploy_to,       "/home/#{fetch(:user)}/apps/#{fetch(:application)}"
set :puma_bind,       "unix://#{shared_path}/tmp/sockets/#{fetch(:application)}-puma.sock"
set :puma_state,      "#{shared_path}/tmp/pids/puma.state"
set :puma_pid,        "#{shared_path}/tmp/pids/puma.pid"
set :puma_access_log, "#{release_path}/log/puma.error.log"
set :puma_error_log,  "#{release_path}/log/puma.access.log"
set :ssh_options,     { forward_agent: true, user: fetch(:user), keys: %w(~/.ssh/id_rsa.pub) }
set :puma_preload_app, true
set :puma_worker_timeout, nil
set :puma_init_active_record, true  # Change to false when not using ActiveRecord

namespace :puma do
  desc 'Create Directories for Puma Pids and Socket'
  task :make_dirs do
    on roles(:app) do
      execute "mkdir #{shared_path}/tmp/sockets -p"
      execute "mkdir #{shared_path}/tmp/pids -p"
    end
  end

  before :start, :make_dirs
end

namespace :deploy do
  desc "Make sure local git is in sync with remote."
  task :check_revision do
    on roles(:app) do
      unless `git rev-parse HEAD` == `git rev-parse origin/master`
    puts "WARNING: HEAD is not the same as origin/master"
    puts "Run `git push` to sync changes."
    exit
      end
    end
  end

  desc 'Initial Deploy'
  task :initial do
    on roles(:app) do
      before 'deploy:restart', 'puma:start'
      invoke 'deploy'
    end
  end

  desc 'Restart application'
  task :restart do
    on roles(:app), in: :sequence, wait: 5 do
      invoke 'puma:restart'
    end
  end
当我运行
cap production deploy:initial
时,出现以下错误:

Results logged to
/home/deploy/apps/testapp/shared/bundle/ruby/2.2.0/extensions/x86_64-linux/2.2.0/nokogiri-1.8.0/gem_make.out

An error occurred while installing nokogiri (1.8.0), and Bundler cannot
continue.
Make sure that `gem install nokogiri -v '1.8.0'` succeeds before bundling.

In Gemfile:
  rails was resolved to 4.2.0, which depends on
    actionmailer was resolved to 4.2.0, which depends on
      actionpack was resolved to 4.2.0, which depends on
    actionview was resolved to 4.2.0, which depends on
      rails-dom-testing was resolved to 1.0.8, which depends on
        nokogiri
bundle stderr: Nothing written


** DEPLOY FAILED
** Refer to log/capistrano.log for details. Here are the last 20 lines:




extconf failed, exit code 1



Gem files will remain installed in

/home/deploy/apps/testapp/shared/bundle/ruby/2.2.0/gems/nokogiri-1.8.0 for

inspection.

Results logged to

/home/deploy/apps/testapp/shared/bundle/ruby/2.2.0/extensions/x86_64-linux/2.2.0/nokogiri-1.8.0/gem_make.out



An error occurred while installing nokogiri (1.8.0), and Bundler cannot

continue.

Make sure that `gem install nokogiri -v '1.8.0'` succeeds before bundling.



In Gemfile:

  rails was resolved to 4.2.0, which depends on

    actionmailer was resolved to 4.2.0, which depends on

 DEBUG [419bf769]             actionpack was resolved to 4.2.0, which depends on

    actionview was resolved to 4.2.0, which depends on

      rails-dom-testing was resolved to 1.0.8, which depends on

        nokogiri
我在远程服务器上安装了ruby 2.2.1。为什么在这里使用
2.2.0

我还删除了
Gemfile.lock
文件,并再次运行了
包。该文件类似于:

...

loofah (2.0.3)
  nokogiri (>= 1.5.9)
mail (2.6.6)
  mime-types (>= 1.16, < 4)
mime-types (3.1)
  mime-types-data (~> 3.2015)
mime-types-data (3.2016.0521)
mini_portile2 (2.2.0)
minitest (5.10.2)
multi_json (1.12.1)
net-scp (1.2.1)
  net-ssh (>= 2.6.5)
net-ssh (4.1.0)
nokogiri (1.8.0)
  mini_portile2 (~> 2.2.0)
puma (3.9.1)
rack (1.6.8)
rack-test (0.6.3)
  rack (>= 1.0)
rails (4.2.0)
  actionmailer (= 4.2.0)
  actionpack (= 4.2.0)
  actionview (= 4.2.0)
  activejob (= 4.2.0)
  activemodel (= 4.2.0)
  activerecord (= 4.2.0)
  activesupport (= 4.2.0)
  bundler (>= 1.3.0, < 2.0)
  railties (= 4.2.0)
  sprockets-rails
rails-deprecated_sanitizer (1.0.3)
  activesupport (>= 4.2.0.alpha)
rails-dom-testing (1.0.8)
  activesupport (>= 4.2.0.beta, < 5.0)
  nokogiri (~> 1.6)
  rails-deprecated_sanitizer (>= 1.0.1)

...


PLATFORMS
  ruby

DEPENDENCIES
  byebug
  capistrano
  capistrano-bundler
  capistrano-rails
  capistrano-rvm
  capistrano3-puma
  coffee-rails (~> 4.1.0)
  jbuilder (~> 2.0)
  jquery-rails
  puma
  rails (= 4.2.0)
  sass-rails (~> 5.0)
  sdoc (~> 0.4.0)
  spring
  sqlite3
  turbolinks
  uglifier (>= 1.3.0)
  web-console (~> 2.0)
。。。
丝瓜(2.0.3)
nokogiri(>=1.5.9)
邮件(2.6.6)
mime类型(>=1.16,<4)
mime类型(3.1)
mime类型数据(~>3.2015)
mime类型数据(3.2016.0521)
迷你端口2(2.2.0)
小型试验(5.10.2)
多线程json(1.12.1)
净scp(1.2.1)
net ssh(>=2.6.5)
net ssh(4.1.0)
nokogiri(1.8.0)
迷你端口2(~>2.2.0)
美洲狮(3.9.1)
机架(1.6.8)
机架测试(0.6.3)
机架(>=1.0)
轨道(4.2.0)
actionmailer(=4.2.0)
actionpack(=4.2.0)
actionview(=4.2.0)
活动作业(=4.2.0)
activemodel(=4.2.0)
activerecord(=4.2.0)
动态支持(=4.2.0)
捆绑机(>=1.3.0,<2.0)
栏杆(=4.2.0)
链轮轨道
rails-不推荐的_消毒液(1.0.3)
activesupport(>=4.2.0.alpha)
rails dom测试(1.0.8)
activesupport(>=4.2.0.beta,<5.0)
nokogiri(~>1.6)
rails-不推荐使用的_消毒剂(>=1.0.1)
...
平台
红宝石
依赖关系
比伯
卡皮斯特拉诺
卡皮斯特拉诺捆扎机
卡皮斯特拉诺轨道
卡皮斯特拉诺rvm
美洲狮
咖啡导轨(~>4.1.0)
jbuilder(~>2.0)
jquery rails
彪马
钢轨(=4.2.0)
sass轨道(~>5.0)
sdoc(~>0.4.0)
春天
sqlite3
涡轮链路
uglifier(>=1.3.0)
web控制台(~>2.0)

有时我试了又试,终于找到了原因

这只是为什么不能安装nokogiri

在目标服务器上,应首先安装以下必要的软件包:

sudo apt-get install zlib1g-dev libssl-dev libreadline-dev libyaml-dev libxml2-dev libxslt-dev 

nokogiri
gem依赖于以下库:
libxml2 dev
libxslt dev
(可能)。

gem文件中的Ruby版本是什么?我现在知道原因了。远程服务器未安装必要的库:
sudo apt get install zlib1g dev libssl dev libreadline dev libyaml dev libxml2 dev libxslt dev
使用该信息创建一个答案,并对其进行适当的格式化。因此,将允许您在超时后选择答案。@管理员感谢您的编辑!