如何在Thin作爲服務運行時使用EventMachine.connect_unix_domain
(使用下面的init腳本(摘錄)和配置)。直接在下面的代碼是問題(我得到一個eventmachine not initialized: evma_connect_to_unix_server
錯誤)。第二個代碼示例有效,但不允許我將精簡(我不認爲)。 Thin是否已經沒有EventMachine的正在運行的實例?EventMachine UNIX套接字連接:如何使用Thin作爲服務運行?
更新:奇怪的是:停止服務器(與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
看到我上面的修改。 'EventMachine.run do'肯定會阻止運行該應用程序的調用。我的主要問題是我想在UNIX套接字上運行Thin,而不是端口,我似乎無法使用App.run! –