Вызов заданий rake: работа автоматически после запуска rails в консоли

Могу ли я автоматически вызывать rake jobs: work после запуска rails s в консоли?

В настоящее время, после запуска rails s в cmd, я также буду запускать rake jobs: work в другой консоли, я хочу, чтобы после запуска «rails s» автоматически запускалась работа jobs :.


person hey    schedule 30.01.2015    source источник
comment
Что вы имеете в виду, говоря «после бега»? Когда он закончится (это сервер, поэтому вам придется его остановить)? Или когда он начнется (никогда нельзя быть уверенным, что он уже готов)? Пожалуйста, опишите подробнее, что вам нужно. Что делает эта работа и нужен ли вам сервер, когда вы ее действительно запускаете?   -  person pawel7318    schedule 30.01.2015
comment
привет, Павел, что я хочу сделать, это когда я запускаю rails s в консоли, rake jobs: work (также) автоматически запускается.   -  person hey    schedule 30.01.2015


Ответы (2)


Правильный способ сделать это - использовать диспетчер процессов, например Invoker или Foreman. По ссылкам есть обширная документация, но она сводится к следующим шагам:

  1. Установите программное обеспечение
  2. Создайте файл конфигурации, в котором вы укажете, какие процессы вы собираетесь запускать. Оба поддерживают объявление стиля Procfile.
  3. Используйте клиент командной строки, чтобы запустить диспетчер процессов.

Основываясь на моем личном опыте, я настоятельно рекомендую Invoker, он выходит за рамки простого менеджера процессов и включает в себя еще несколько удобных функций, таких как поддержка локального домена .dev.

person Swanand    schedule 30.01.2015

Вы можете просто:

rails server & rake jobs:work

Он будет работать rails server как фоновое задание, которое вы можете вернуть на передний план с помощью fg. Может раздражать, что вы получите смешанный вывод обоих процессов.

Я не уверен, что вам нужно и чего вы ожидаете, но, возможно, вам было бы хорошо использовать screen (или tmux), чтобы запускать их параллельно и иметь возможность переключаться между ними.

Вы можете создать свой собственный .screenrc скрипт, который будет автоматически запускать сервер и любые другие команды.

Есть небольшая проблема: если вы запустите сервер с него и закроете его (ctrl + c), вы потеряете его экранное окно. К счастью, для этого тоже есть решение (разработанное и для SO - вы можете прочитать об этом подробнее здесь)

Итак, я использую для этого .run_screen вспомогательный скрипт (не забудьте chmod +x его):

#!/bin/bash
/bin/bash -i <<<"$*; exec </dev/tty" 

Чем у меня .screenrc_rails файл:

#shell -${SHELL}
caption always "%n(%t) %= %{b}@%H[%l] : %{r}%c:%s"
termcapinfo xterm ti@:te@
termcap xterm 'AF=\E[3%dm:AB=\E[4%dm'
terminfo xterm 'AF=\E[3%p1%dm:AB=\E[4%p1%dm'
startup_message off

screen -t server 2 ${HOME}/.run_screen rails s
screen -t spork 3 ${HOME}/.run_screen bundle exec spork
screen -t dev_log 4 ${HOME}/.run_screen tail -f ./log/development.log
screen -t test_log 5 ${HOME}/.run_screen tail -f ./log/test.log
screen -t bash 0
screen -t bash 1 

И псевдоним (screen r (ails)), определенный в .bash_profile:

alias screenr='screen -c ~/.screenrc_rails'

Если вы не знаете screen, начните с ctrl+a, ". ctrl+a, ? окажут вам некоторую помощь.

Я надеюсь, вам понравится.

person pawel7318    schedule 30.01.2015
comment
спасибо за ваш ответ, но он не работает, если я запускаю rails server & rake jobs: работает только сервер rails, delayed_job не запускался, наоборот. - person hey; 02.02.2015
comment
Вы уверены, что это не работает в фоновом режиме? Используйте bg, чтобы проверить и fg, чтобы вывести его на передний план. Посмотрите этот пример, чтобы увидеть, как он должен работать: (sleep 5 ; echo foo) & echo bar - person pawel7318; 02.02.2015
comment
РЕЗУЛЬТАТ: сон: недопустимый интервал времени 5;' sleep: invalid time interval echo 'сон: недопустимый интервал времени foo' Try sleep --help' для получения дополнительной информации. бар. Я думаю, что использование '&' запустит обе задачи, но вторая задача будет запущена только после завершения первой задачи. - person hey; 04.02.2015
comment
Разве это не linux и bash? - person pawel7318; 04.02.2015
comment
извините, я забыл указать, я использую командную строку Windows с рельсами - person hey; 05.02.2015