Unicorn Что это такое? 1. для Rack приложение разработано HTTP server 2. Он разработан с использованием расширенных возможностей Unix. 3. для Обслуживание клиентов с малой задержкой и высокой пропускной способностью
характеристика: 1. для Rack, Unix, Разработан для быстрого клиента и простой отладки. 2. Полностью совместим Ruby 1.8 и 1.9。 3. процессуправлять:Unicorn получити Перезапустите задачу, которая прекратила свое существование из-за ошибки приложения.,不需要自己управлять多个процессипорт。Unicorn Может генерировать и управлять любым количеством задач процесса. 4. Балансировка нагрузки полностью выполняется ядром операционной системы (Unix). Запросы не будут накапливаться во время выполнения загруженных задач. 5. Нет необходимости заботиться о том, является ли приложение потокобезопасным, рабочие Запуск существующего имеет собственное независимое адресное пространство, и одновременно доступен только один клиентский сервис. 6. Поддержать всех Rack приложение. 7. использовать USR1 信号来固定重复打开应用程序的所有日志文件。Unicorn Вы также можете постепенно определить, что несколько строк журналов запроса помещаются в один и тот же файл. 8. nginx бинарное обновление без потери соединения. вы можете обновить Единорог, все ваше приложение, библиотеки или даже Ruby редактор без потери соединения с клиентом. 9. существовать fork Процесс Если есть особые потребности, вы можете использовать before_fork и after_fork . Если «preload_app» для false Когда вы не можете использовать. 10. Можетиспользовать copy-on-wirte-friendly Управление памятью для сохранения контента (установив “preload_app" для true )。 11. Может контролировать несколько интерфейсов, в том числе: UNIX розетки, каждая worker process Его также можно передать во время простой отладки. after_fork Хук привязан к частному порту. 12. Configurationuse прост и удобен в использовании. Ruby DSL。
LinuxВнизUnicornсерверКонфигурация установки:
gem install unicorn
Создайте файл конфигурации единорога для проекта.
new_sxcoalts2.0/config/unicorn.rb Содержание следующее: app_path = "/work/new_sxcoalts2.0" #Путь к программе прослушайте 3000 # номер порта worker_processes 2 #номер ядра процессора pid "#{app_path}/tmp/pids/unicorn.pid" stderr_path "#{app_path}/log/unicorn.log" stdout_path "#{app_path}/log/unicorn.log" рельсы_env = 'производство'
запустить: Откройте корневой каталог проекта cd /work/new_sxcoalts2.0/ unicorn_rails -c /work/new_sxcoalts2.0/config/unicorn.rb Параметр -c означает, что выполняет содержимое последующего файла конфигурации.
Остановить службу: Фоновая служба: процесс уничтожения Служба командной строки: ctrl + c
Создайте автозагрузку и закройте службу: Создайте папку конфигурации проекта: /etc/unicorn Существуют Добавьте все необходимые конфигурации проекта в этот каталог (можно разместить несколько) Например: проект1.conf содержаниедля RAILS_ROOT=/work/project1 RAILS_ENV=production
Написание запуска сценария единорога существование/etc/init.d/Вниз建立unicorn_init содержаниедля #!/бин/ш # # скрипт init.d для одной или нескольких установок единорога. Ожидается как минимум один .conf # файл в /etc/unicorn # # Изменено jay@gooby.org http://github.com/jaygooby # на основе http://gist.github.com/308216 автора http://github.com/mguterl # ## Пример файла /etc/unicorn/new_sxcoalts_2.0.conf ## ## RAILS_ENV=производство ## RAILS_ROOT=/var/apps/www/my_app/current # # Это настраивает мастер-единорог для вашего приложения в /var/apps/www/my_app/current, работающем в # производственный режим. Он прочитает config/unicorn.rb для дальнейшей настройки. # # Вы должны убедиться, что в каждом файле config/unicorn.rb установлены разные порты или сокеты, если # вы одновременно используете более одного мастера. # # Если вы вызовете этот скрипт без каких-либо параметров конфигурации, он попытается запустить # команда init для всех ваших конфигураций единорога, перечисленных в /etc/unicorn/*.conf # # /etc/init.d/unicorn start # запускает всех единорогов # # Если вы укажете конкретную конфигурацию, она будет работать только с ней # # /etc/init.d/unicorn start /etc/unicorn/new_sxcoalts_2.0.conf
set -e
sig () { test -s "$PID" && kill -$1 `cat "$PID"` }
oldsig () { test -s "$OLD_PID" && kill -$1 `cat "$OLD_PID"` }
cmd () {
case $1 in start) sig 0 && echo >&2 "Already running" && exit 0 echo "Starting" $CMD ;; stop) sig QUIT && echo "Stopping" && exit 0 echo >&2 "Not running" ;; force-stop) sig TERM && echo "Forcing a stop" && exit 0 echo >&2 "Not running" ;; restart|reload) sig USR2 && sleep 5 && oldsig QUIT && echo "Killing old master" `cat $OLD_PID` && exit 0 echo >&2 "Couldn't reload, starting '$CMD' instead" $CMD ;; upgrade) sig USR2 && echo Upgraded && exit 0 echo >&2 "Couldn't upgrade, starting '$CMD' instead" $CMD ;; rotate) sig USR1 && echo rotated logs OK && exit 0 echo >&2 "Couldn't rotate logs" && exit 1 ;; *) echo >&2 "Usage: $0 " exit 1 ;; esac }
setup () {
echo -n "$RAILS_ROOT: " cd $RAILS_ROOT || exit 1 export PID=$RAILS_ROOT/tmp/pids/unicorn.pid export OLD_PID="$PID.oldbin"
CMD="unicorn_rails -c config/unicorn.rb -E $RAILS_ENV -D" }
start_stop () {
# either run the start/stop/reload/etc command for every config under /etc/unicorn # or just do it for a specific one
# $1 contains the start/stop/etc command # $2 if it exists, should be the specific config we want to act on if [ $2 ]; then . $2 setup cmd $1 else for CONFIG in /etc/unicorn/*.conf; do # import the variables . $CONFIG setup
# run the start/stop/etc command cmd $1 done fi }
ARGS="$1 $2" start_stop $ARGS
Выполнить команду: /etc/init.d/unicorn_init старт/стоп/перезапуск