2015-06-10 5 views
1

Сейчас, после того, как загружены все мои исполняемый работает мое приложение, как это:Синатра запустить как демон программно

Rack::Handler::pick(['puma']).run VCK::App 

и он работает, но он блокирует терминал (который хорошо для развития)

Как мне заставить это запускать как демон программным способом из моего исполняемого файла?

EDIT:

кода я использую, чтобы начать Синатр как демон:

if options[:daemonize] 
     pid = fork {Rack::Handler::pick(['puma']).run VCK::App} 
     File.open(pid_file_loc, 'w') {|f| f.write(pid)} 
     Process.detach(pid) 
    else 
     Rack::Handler::pick(['puma']).run VCK::App 
    end 

код, я использую, чтобы остановить Синатры Daemon:

Process.kill(15, File.read(pid_file_loc).to_i) 

ответ

3

Вы можете демон любого процесса рубинового изнутри ваш код с помощью Process#daemon

+1

Это не демон, это всего лишь процесс r unning в фоновом режиме со стандартным выходом/ошибкой, идущим на консоль. И как только оболочка будет закрыта, сеансы получат сигнал HUP и закрывают рубиновый процесс. По крайней мере, нужно сделать что-то вроде «nohup ruby ​​server.rb> /var/tmp/server.out 2> & 1 &", чтобы предотвратить закрытие процесса по сигналу зависания. –

Смежные вопросы