запустить и остановить Nginx, MySQL сервер - PullRequest
1 голос
/ 25 ноября 2011

Я занимаюсь разработкой приложения Rails v2.3 . с базой данных MySQL v5.1 на компьютере Ubuntu .

Я знаю команды для запуска, остановки Nginx и MySQL в командной строке.

Но теперь мне нужно определить следующий процесс в одном из моих граблей моего приложения на Rails .:

stop Nginx --> stop(shut down) MySQL --> ... --> start MySQL --> start Nginx

Это означает, что все они должны быть определены в сценарии ruby ​​в rake task моего Rails приложения.

Я не уверен, как заставить код ruby ​​запускать описанный выше процесс (выполнить команды) в моей задаче rake ?

Ответы [ 3 ]

1 голос
/ 25 ноября 2011

Проверьте Модуль ядра Руби (он встроен). Используя обратные пометки, вы можете запускать команды для остановки / запуска nginx и MySQL и даже проверять их коды выхода, чтобы убедиться в их правильном выполнении (если ваши сценарии остановки / запуска поддерживают коды выхода).

Пример:

# In your Rakefile
namespace :servers do
  task :stop do
    nginx_stop_output = `service nginx stop`
    if $?.exitstatus != 0
      # handle shutdown failure
    end

    mysql_stop_output = `service mysql stop`
    if $?.exitstatus != 0
      # handle shutdown failure
    end
  end

  task :start do
    nginx_start_output = `service nginx start`
    if $?.exitstatus != 0
      # handle startup failure
    end

    mysql_start_output = `service mysql start`
    if $?.exitstatus != 0
      # handle startup failure
    end
  end
end

Подставьте в свои собственные команды остановки / запуска в обратных галочках.

Затем вы можете запускать эти задачи с rake servers:stop и rake servers:start.

0 голосов
/ 25 ноября 2011

Используйте gem systemu для выполнения команд. Это лучше, чем любое из встроенных средств командной строки Ruby. Чтобы позаботиться о вашей серверной среде, вы можете обратиться к инфраструктуре развертывания, например vlad .

0 голосов
/ 25 ноября 2011

Если nginx не работает на порте 80, вы, вероятно, используете sudo. В этом случае ваши варианты:

  1. Измените /etc/sudoers, чтобы разрешить вашему пользователю работать с nginx без запроса пароля.

  2. Используйте Open3#popen3 вместо `` или system() для запуска команд оболочки. Open3 позволяет вам взаимодействовать с командой, если она запрашивает дополнительную информацию, поэтому вы можете ввести пароль sudo, когда ваша задача rake пытается выполнить команду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...