Задать вопрос
Able1991
@Able1991
Пишу на рельсах

Как перезагрузить Rails сервер из браузера?

Необходимо перезагружать сервак, изначально писал отдельно shell и .rb скрипты которые вызывал в контроллере через system(), судя по логам в консоли сервер и вправду перезагружается, но на запросы бразура не отвечает вообще никак потом, как быть?
def restart_server
    Thread.new do
      system "ruby restart.rb"
    end
    render :json => {}
end

Запускаю тот же скрипт с консоли все перезагружается нормально

restart.rb:
require 'fileutils'

pid_file = 'tmp/pids/server.pid'
if File.exist?(pid_file)
	pid = File.read(pid_file).to_i
	Process.kill 9, pid
	File.delete pid_file
	puts "SERVER STOPPED"
else
	puts "SERVER NOT STARTED"
end
system( "rails s -p 8090" )


Сервер thin окружение dev
  • Вопрос задан
  • 3057 просмотров
Подписаться 8 Оценить 4 комментария
Решения вопроса 1
Vakiliy
@Vakiliy
Да, убивать так убивать :) KILL(9) Или есть какие то причины использовать именно KILL?

require 'fileutils'

pid_file = 'tmp/pids/server.pid'
if File.exist?(pid_file)
	pid = File.read(pid_file).to_i
	Process.kill 'TERM', pid
	puts "SERVER STOPPED"
else
	puts "SERVER NOT STARTED"
end

Process.exec( "/usr/bin/env rails s -p 8090" )


И да, вы запускаете сервер из скрипта на 8090 порту.
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
Может быть с переменными окружения проблемы.
Ответ написан
viktorvsk
@viktorvsk
А если fork вместе Thread.new ? Первый, вроде, должен скопировать все переменные и состояние и работать независимо
Ответ написан
YourWest
@YourWest
Ruby Developer
Сервер перезагрузится сам:
system 'touch tmp/restart.txt'
Ответ написан
Tenkoff
@Tenkoff
thin -C /path_to/config.yml restart
Ответ написан
@Shetani
А вот так например
`kill -9 \`cat tmp/pids/server.pid\` && rm -f tmp/pids/server.pid && rails s -p 8090 -d`

нельзя сервер перезапустить? (и да, это не одинарные кавычки, а апострофы, те что на букве Ё)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы