2012-04-25 6 views
0

я начинаю до трех тонких процессов с bundle exec thin start -C /etc/thin/staging.ymlтонкие запускает два процесса рубин на сервер, убивает неправильный один

я использую RVM, рубин версия РЗЭ-1.8.7

Содержание /etc/thin/staging.yml:

---                
timeout: 30              
pid: /home/myuser/apps/g/shared/pids/thin.pid   
max_persistent_conns: 512          
servers: 3              
chdir: /home/myuser/apps/g/current      
port: 3040              
require: []              

log: /home/myuser/apps/g/shared/log/thin.log    
daemonize: true             
address: 0.0.0.0             
max_conns: 1024             
wait: 30               
environment: staging            

lsof -i :3040-3042 покажет три рубиновых процесса, прослушивающих порты 3040-3042, но файлы pid содержат три разных (чуть более низких) разряда. Все шесть процессов называются merb : merb : Master

Когда я перестаю тонкий с bundle exec thin stop -C /etc/thin/staging.yml, тонкий сначала посылает сигнал QUIT процессам в файлах pid, а затем после таймаута - сигнал KILL.

Файлы pid теперь исчезли, тонкие журналы показывают, что сервер остановлен, но все еще три рубиновых процесса прослушивают порты 3040-3042, поэтому последующий thin start не удастся.

Единственными отличиями между выходом lsof -p обоих процессов является библиотека /lib/libnss_files-2.12.so и разъем postgres.

Мои вопросы:

  • почему я получаю тайм-аут во время thin stop?
  • Почему существуют два процесса на сервер вместо одного?
  • , как это исправить элегантно (без убийства -9)

ответ

0

Видимо Загрузчик Merb делает вилку. Как это дерьмо!

Комплект Merb::Config[:fork_for_class_load] = false в вашем config.ru.

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