Siantraはバックグラウンドモードがありませんか?Webrickソースのserver.rbのバックグラウンドプロセスの実現は簡潔である
WindowsにSinatraと書かれたコードがUnixに伝わり、
chmod+xの後、スクリプトエラーを直接実行します.
: bad interpreter: No such file or directory
これは、このファイルがDOS形式で編集されているため、Unixは認識していません.変換する必要があります.
Viで開くと、
:set ff?Dosかどうかを調べてみると、
set ff=unixをUnixに変換し、
そしてもう一度実行してみます.
Sinatraはどのように後でモードを起動するかを見つけていません.これは考慮する範囲内ではないかもしれません.
次のWebrickのデーモン・プロセス・コードを追加します.
最後にもう一つ付け加えます.
Daemon.スタートでOKです.
ps-ajx見てみましょう:
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
1 15755 15754 15754 ? -1 S 0 0:00/usr/local/bin/ruby ./server.rb
一般的なデーモン:
使うときに写せばいいのに、ハハハハ.
しかし、デーモンプロセスの実現原理を理解するには、Javaコードを書くだけの学生たちが『UNIX環境プログラミング』:)を見てください.
=====================
以前のコードをめくると、Sinatraもこのように使用できることがわかりました.
そうなるとオリジナルのMongrelやThinなどのデーモンプロセスの実現が予想されますが、
小さな機能を実現するためにそんなに多くの時間を無駄に勉強する必要はありません.私は専門家になれません.そうするつもりはありません.
chmod+xの後、スクリプトエラーを直接実行します.
: bad interpreter: No such file or directory
これは、このファイルがDOS形式で編集されているため、Unixは認識していません.変換する必要があります.
Viで開くと、
:set ff?Dosかどうかを調べてみると、
set ff=unixをUnixに変換し、
そしてもう一度実行してみます.
Sinatraはどのように後でモードを起動するかを見つけていません.これは考慮する範囲内ではないかもしれません.
次のWebrickのデーモン・プロセス・コードを追加します.
最後にもう一つ付け加えます.
Daemon.スタートでOKです.
ps-ajx見てみましょう:
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
1 15755 15754 15754 ? -1 S 0 0:00/usr/local/bin/ruby ./server.rb
一般的なデーモン:
class Daemon
def Daemon.start
exit!(0) if fork
Process::setsid
exit!(0) if fork
Dir::chdir("/")
File::umask(0)
STDIN.reopen("/dev/null")
STDOUT.reopen("/dev/null", "w")
STDERR.reopen("/dev/null", "w")
yield if block_given?
end
end
使うときに写せばいいのに、ハハハハ.
しかし、デーモンプロセスの実現原理を理解するには、Javaコードを書くだけの学生たちが『UNIX環境プログラミング』:)を見てください.
=====================
#!/usr/local/bin/ruby
require 'rubygems'
require 'sinatra/base'
require 'rack'
require 'open3'
$build_sh = File.join("/home/admin/taiji/src/taiji/src/task","build.rb")
class TaijiBuilderServer < Sinatra::Base
get '/taiji' do
"{stat:'Running'}"
end
get '/taiji/build' do
if (params[:project_name] && params[:svn] && params[:project_id]) != nil then
# SVN 、 , Sinatra !
Open3.popen3 %Q{ruby #{$build_sh} #{params[:project_name]} #{params[:svn]} #{params[:project_id]}}
"{stat:'OK',params:'#{Rack::Request.new(env).params.inspect}',ts:'#{Time.now().to_s}',cmd:'ruby #{$build_sh} #{params[:project_name]} #{params[:svn]} #{params[:project_id]}'}"
else
"{stat:'Params Error'}"
end
end
end
class Daemon
def Daemon.start
exit!(0) if fork
Process::setsid
exit!(0) if fork
Dir::chdir("/")
File::umask(0)
STDIN.reopen("/dev/null")
# a( ) ,w
# Sinatra
STDOUT.reopen("/home/admin/taiji/logs/build_stdout.log", "a+")
# Error
STDERR.reopen("/home/admin/taiji/logs/build_stdout.log", "a+")
yield if block_given?
end
end
# Sinatra
Daemon.start{TaijiBuilderServer.run! :host => '10.2.226.20', :port => 9090}
以前のコードをめくると、Sinatraもこのように使用できることがわかりました.
Rack::Handler::Mongrel.run builder, :Port => 9292
そうなるとオリジナルのMongrelやThinなどのデーモンプロセスの実現が予想されますが、
小さな機能を実現するためにそんなに多くの時間を無駄に勉強する必要はありません.私は専門家になれません.そうするつもりはありません.