EventMachine.connect_unix_domain
Thin as a service (init スクリプト (抜粋) と以下の構成を使用) を実行しているときに使用するにはどうすればよいですか。直下のコードが問題です (eventmachine not initialized: evma_connect_to_unix_server
エラーが発生します)。2 番目のコード例は機能しますが、シンをデーモン化することはできません (私は思いません)。Thin には EventMachine の実行中のインスタンスがまだありませんか?
更新: 奇妙なことに、(でservice thin stop
) サーバーを停止すると、config.ru ファイルに入り、アプリを実行するようです (したがって、stop
コマンドがタイムアウトしてプロセスを強制終了するまで機能します)。この動作を引き起こしている可能性のある薄い停止が発生するとどうなりますか?
問題のあるコード
class Server < Sinatra::Base
# Webserver code removed
end
module Handler
def receive_data data
$received_data_changed = 1
$received_data = data
end
end
$sock = EventMachine.connect_unix_domain("/tmp/mysock.sock", Handler)
作業コード
EventMachine.run do
class Server < Sinatra::Base
# Webserver code removed
end
module Handler
def receive_data data
$received_data_changed = 1
$received_data = data
end
end
$sock = EventMachine.connect_unix_domain("/tmp/mysock.sock", Handler)
Server.run!(:port => 4567)
end
初期化スクリプトの抜粋
DAEMON=/usr/local/bin/thin
SCRIPT_NAME=/etc/init.d/thin
CONFIG_PATH=/etc/thin
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
case "$1" in
start)
$DAEMON start --all $CONFIG_PATH
;;
シン構成
---
chdir: /var/www
environment: development
timeout: 30
log: log/thin.log
pid: tmp/pids/thin.pid
max_conns: 1024
max_persistent_conns: 512
require: []
wait: 30
servers: 1
socket: /tmp/thin.server.sock
daemonize: true