0

私はしばらくこれに苦労してきました.resqueやresqueスケジューラのようなバックグラウンドプロセスを開始する正しいアプローチは何ですか? 神を使うのはやり過ぎですか?

現在、私は神を働かせようとしていますが、 *.god conf ファイルをアプリのディレクトリに置くべきか、それとも別の場所に置くべきかはわかりません。

これは私が使用するものです:

config
 |- app.god
 |- God
   |- resque.god
   |- resque_scheduler.god

# config/god/resque.god
rails_env   = ENV['RAILS_ENV']  || raise(ArgumentError, "RAILS_ENV not defined")
rails_root  = ENV['RAILS_ROOT'] || File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
num_workers = rails_env == 'production' ? 5 : 2

num_workers.times do |num|
  God.watch do |w|
    w.dir      = "#{rails_root}"
    w.name     = "resque-#{num}"
    w.group    = 'resque'
    w.interval = 30.seconds
    w.env      = {"QUEUE"=>"*", "RAILS_ENV"=>rails_env, "BUNDLE_GEMFILE"=>"#{rails_root}/Gemfile"}
    w.start    = "/usr/bin/rake -f #{rails_root}/Rakefile environment resque:work"
    w.log      = "#{rails_root}/log/resque-scheduler.log"

    ... start/stop methods  ...
  end
end

root ユーザーと MyApp ユーザーがいます。MyApp ユーザーのアプリは次の場所にあります。/home/myapp/apps/myapp_production/current

私が使用する神のカピストラーノのレシピは次のとおりです。

# config/deploy.rb
after "deploy:restart", "god:restart"

namespace :god do
  def try_killing_resque_workers
    run "pkill -3 -f resque"
  rescue
    nil
  end

  desc "Restart God gracefully"
  task "restart", :roles => :app do
    god_config_path = File.join(release_path, 'config', 'app.god')
    begin
      # Throws an exception if god is not running.
      run "cd #{release_path}; bundle exec god status && RAILS_ENV=#{rails_env} RAILS_ROOT=#{release_path} bundle exec god load #{god_config_path} && bundle exec god start resque"

      # Kill resque processes and have god restart them with the newly loaded config.
      try_killing_resque_workers
    rescue => ex
      # god is dead, workers should be as well, but who knows.
      try_killing_resque_workers

      # Start god.
      run "cd #{release_path}; RAILS_ENV=#{rails_env} bundle exec god -c #{god_config_path}"
    end
  end
end

デプロイすると、「サーバーが利用できません (または、サーバーにアクセスする権限がありません)」というメッセージが表示されます

奇妙なのは、ルートとしてログインして実行god statusしても何も返されませんが、実行するgod --versionとバージョンが返されることです。

誰でも理由を知っていますか?

4

1 に答える 1

1

init.d スクリプトをセットアップしましたか? 神が走っていますか?

/etc/init.d/god status

手で起動してみることができます

/usr/bin/god -c /etc/god/conf.god -D

ログを確認してください

于 2013-03-28T15:09:34.497 に答える