Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Unicorn PID在初始部署时过时_Ruby On Rails_Capistrano_Unicorn - Fatal编程技术网

Ruby on rails Unicorn PID在初始部署时过时

Ruby on rails Unicorn PID在初始部署时过时,ruby-on-rails,capistrano,unicorn,Ruby On Rails,Capistrano,Unicorn,我第一次尝试在rails应用程序中使用capistrano和unicorn。我可以成功部署,但unicorn不会从stderr开始出现以下错误: I, [2013-03-25T16:55:35.877323 #2378] INFO -- : reloading config_file=/var/www/good/current/config/unicorn.rb E, [2013-03-25T16:55:35.881496 #2378] ERROR -- : error reloading c

我第一次尝试在rails应用程序中使用capistrano和unicorn。我可以成功部署,但unicorn不会从stderr开始出现以下错误:

I, [2013-03-25T16:55:35.877323 #2378]  INFO -- : reloading config_file=/var/www/good/current/config/unicorn.rb E, [2013-03-25T16:55:35.881496 #2378] ERROR -- : error reloading config_file=/var/www/good/current/config/unicorn.rb: Already running on PID:2378 (or pid=/var/www/good/current/tmp/pids/unicorn.pid is stale) (ArgumentError) E, [2013-03-25T16:55:35.881548 #2378] ERROR -- : /var/www/good/shared/bundle/ruby/1.9.1/gems/unicorn-4.6.2/lib/unicorn/http_server.rb:193:in `pid=' E, [2013-03-25T16:55:35.881579 #2378] ERROR -- : /var/www/good/shared/bundle/ruby/1.9.1/gems/unicorn-4.6.2/lib/unicorn/configurator.rb:111:in `block in commit!' E, [2013-03-25T16:55:35.881606 #2378] ERROR -- : /var/www/good/shared/bundle/ruby/1.9.1/gems/unicorn-4.6.2/lib/unicorn/configurator.rb:108:in `each' E, [2013-03-25T16:55:35.881645 #2378] ERROR -- : /var/www/good/shared/bundle/ruby/1.9.1/gems/unicorn-4.6.2/lib/unicorn/configurator.rb:108:in `commit!' E, [2013-03-25T16:55:35.881674 #2378] ERROR -- : /var/www/good/shared/bundle/ruby/1.9.1/gems/unicorn-4.6.2/lib/unicorn/http_server.rb:699:in `load_config!' E, [2013-03-25T16:55:35.881703 #2378] ERROR -- : /var/www/good/shared/bundle/ruby/1.9.1/gems/unicorn-4.6.2/lib/unicorn/http_server.rb:308:in `join' E, [2013-03-25T16:55:35.881731 #2378] ERROR -- : /var/www/good/shared/bundle/ruby/1.9.1/gems/unicorn-4.6.2/bin/unicorn:126:in `<top (required)>' E, [2013-03-25T16:55:35.881758 #2378] ERROR -- : /var/www/good/shared/bundle/ruby/1.9.1/bin/unicorn:23:in `load' E, [2013-03-25T16:55:35.881786 #2378] ERROR -- : /var/www/good/shared/bundle/ruby/1.9.1/bin/unicorn:23:in `<main>' I, [2013-03-25T16:55:36.233632 #2378]  INFO -- : reaped
#<Process::Status: pid 2392 exit 0> worker=1 I, [2013-03-25T16:55:36.234045 #2378]  INFO -- : reaped
#<Process::Status: pid 2397 exit 0> worker=3 I, [2013-03-25T16:55:36.234560 #2378]  INFO -- : reaped
#<Process::Status: pid 2394 exit 0> worker=2 I, [2013-03-25T16:55:36.336246 #8587]  INFO -- : executing ["/var/www/good/shared/bundle/ruby/1.9.1/bin/unicorn", "-c", "/var/www/good/current/config/unicorn.rb", "-E", "production", "-D", {12=>#<Kgio::UNIXServer:fd 12>, 13=>#<Kgio::TCPServer:fd 13>}] (in /var/www/good/releases/20130325165445) I, [2013-03-25T16:55:36.336510
#8587]  INFO -- : forked child re-executing... I, [2013-03-25T16:55:38.475972 #2378]  INFO -- : reaped
#<Process::Status: pid 2389 exit 0> worker=0 I, [2013-03-25T16:55:38.476109 #2378]  INFO -- : master complete
config/unicorn.rb

require "rvm/capistrano"
set :rvm_type, :system
set :rvm_install_with_sudo, true

require "bundler/capistrano"
set :bundle_without, [:darwin, :development, :test]

set :application, "Talking GOOD"
set :repository,  "git@github.com:FTW-Development/good.git"
set :scm_user, "hunter@ftwdev.com"
ssh_options[:forward_agent] = true


#set :migrate_target, :current
#set :ssh_options, { :forward_agent => true }

#set :rails_env, "production"
set :deploy_to, "/var/www/good"
#set :normalize_asset_timestamps, false #what?
set :user, "rails"
set :group, "www"
set :use_sudo, false




set :keep_releases, 5
after "deploy:restart", "deploy:cleanup"

require 'capistrano-unicorn'
#after 'deploy:restart', 'unicorn:reload' # app IS NOT preloaded
after 'deploy:restart', 'unicorn:restart'  # app preloaded



#role :web, "your web-server here"                          # Your HTTP server, Apache/etc
#role :app, "your app-server here"                          # This may be the same as your `Web` server
#role :db,  "your primary db-server here", :primary => true # This is where Rails migrations will run
#role :db,  "your slave db-server here"



#set :stages, %(production, staging)
#set :default_stage, "staging"
#require 'capistrano/ext/multistage'

#set(:unicorn_env) { rails_env }
#set(:app_env)     { rails_env }
#role(:web) { domain }
#role(:app) { domain }
#role(:db, :primary => true) { domain }

#set(:deploy_to)    { "/home/#{user}/#{application}/#{fetch :app_env}" }
#set(:current_path) { File.join(deploy_to, current_dir) }

server "good.ftwdev.com", :app, :web, :db, :primary => true
app_path = "/var/www/good/current"

# Set unicorn options
worker_processes 1
preload_app true
timeout 180
listen "127.0.0.1:9000"

# Spawn unicorn master worker for user apps (group: apps)
user 'rails.www' 

# Fill path to your app
working_directory "/var/www/good/current"

# Should be 'production' by default, otherwise use other env 
rails_env = ENV['RAILS_ENV'] || 'production'

# Log everything to one file
stderr_path "log/unicorn.log"
stdout_path "log/unicorn.log"

# Set master PID location
pid "#{app_path}/tmp/pids/unicorn.pid"

before_fork do |server, worker|
  ActiveRecord::Base.connection.disconnect!

  old_pid = "#{server.config[:pid]}.oldbin"
  if File.exists?(old_pid) && server.pid != old_pid
    begin
      Process.kill("QUIT", File.read(old_pid).to_i)
    rescue Errno::ENOENT, Errno::ESRCH
      # someone else did our job for us
    end
  end
end

after_fork do |server, worker|
  ActiveRecord::Base.establish_connection
end
Gemfile

source 'https://rubygems.org'

gem 'rails', '3.2.8'

# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'

gem 'mysql2'

gem 'devise', '~> 2.1.0'
gem 'cancan'

# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'
  gem 'bootstrap-sass', '~> 2.2.2.0'

  # See https://github.com/sstephenson/execjs#readme for more supported runtimes
  # gem 'therubyracer', :platforms => :ruby

  gem 'uglifier', '>= 1.0.3'
end


gem 'jquery-rails'
gem 'haml'
gem 'hpricot'
gem 'ruby_parser'
gem 'simple_form'
gem 'high_voltage'
gem 'paperclip', '~> 3.0'
gem 'twitter-bootstrap-rails'


group :production do
  gem 'rb-inotify', '~> 0.9'
  gem 'execjs'
  gem 'therubyracer'
  gem 'unicorn', '~> 4.6'
end

group :development do
  gem 'thin'
  gem 'growl'
  gem 'guard'
  gem 'guard-bundler'
  gem 'guard-livereload'
  gem 'guard-rails'
  gem 'guard-rspec'
  gem 'rack-livereload'
  gem 'html2haml'
  gem 'capistrano'
  gem 'capistrano-unicorn'
  gem 'rvm-capistrano'
  gem 'rb-fsevent', :require => false
  gem 'rb-inotify', '~> 0.9', :require => false
  gem 'rb-fchange', :require => false
end


#gem "rspec-rails", ">= 2.12.1", :group => [:development, :test]
#gem "database_cleaner", ">= 0.9.1", :group => :test
#gem "email_spec", ">= 1.4.0", :group => :test
#gem "cucumber-rails", ">= 1.3.0", :group => :test, :require => false
#gem "launchy", ">= 2.1.2", :group => :test
#gem "capybara", ">= 2.0.2", :group => :test
#gem "factory_girl_rails", ">= 4.1.0", :group => [:development, :test]
#gem "bootstrap-sass", ">= 2.1.1.0"
#gem "devise", ">= 2.2.0"
#gem "cancan", ">= 1.6.8"
#gem "rolify", ">= 3.2.0"
#gem "simple_form", ">= 2.0.4"
#gem "quiet_assets", ">= 1.0.1", :group => :development
#gem "figaro", ">= 0.5.2"  #used for configurations
#gem "better_errors", ">= 0.2.0", :group => :development
#gem "binding_of_caller", ">= 0.6.8", :group => :development




# To use ActiveModel has_secure_password
# gem 'bcrypt-ruby', '~> 3.0.0'

# To use Jbuilder templates for JSON
# gem 'jbuilder'

# Use unicorn as the app server
# gem 'unicorn'

# Deploy with Capistrano
# gem 'capistrano'

# To use debugger
# gem 'debugger'

您的问题是,在部署时,您可能不会在再次运行unicorn之前杀死unicorn主pid。我想问题出在你的卡皮斯特拉诺食谱上

使用unicorn,我们通常在启动服务器时将pid保存在生产环境中的共享文件夹中,您还可以在其中保存日志、上载和其他独立于每个环境的sfuff

请参阅my deploy.rb其中一个的两个任务:

desc "Start unicorn"
  task :start, :except => { :no_release => true } do
    run "cd #{current_path} ; bundle exec unicorn_rails -c config/unicorn.rb -D"
    run "ps aux | grep unicorn_rails | head -n 1 | awk '{print $2}' > #{deploy_to}/shared/tmp/pids/unicorn.pid"
  end

  desc "Stop unicorn"
  task :stop, :except => { :no_release => true } do
    run "kill -s QUIT `cat  #{deploy_to}/shared/tmp/pids/unicorn.pid`"
  end
因此,当我停止unicorn时,我总是杀死共享文件夹中的主pid,当我启动它时,我将该pid复制到生产项目中的共享文件夹中。 在这种情况下,我的重启任务是先调用停止,然后调用启动,但这不是零停机时间…

如果想尝试,以下链接提供了一个停机时间为零的配方:
陈旧的PID可能有三个原因: 1) 对unicorn.pid文件没有写入权限。通过检查启动unicorn服务器时的错误日志,可以很容易地检测到这一点。 2) 对于远程机器:您没有将unicorn.pid添加到.gitignore中,并且每次都通过不注意的提交使用本地pid强制覆盖pid。
3) config/unicorn.rb中存储unicorn.pid的文件路径与cap配方中config/deploy.rb中提供的路径不同。

我遇到了相同的错误,原因是:

当关闭unicorn服务器时,gem'capistrano3 unicorn“试图在tmp/pids/unicorn.pid中杀死unicorn进程id,默认情况下,它位于/shared/pids/unicorn.pid


通过在unicorn.rb中更改unicorn.pid的路径,解决了我的错误。

尝试终止此进程(pid 2378),因为它不是关键性的。我相信该进程是在那时产生的。帽子一停就不见了。。。我试着杀掉所有的ruby进程(可能不是个好主意),但没有任何帮助。我不知道是什么原因导致了这一切,它起作用了吗@Petersmithy您与零停机时间配方的链接已断开。我更新了与Ryan Bates的零停机设置的链接