Unicorn restart/upgrade doesn't work

放肆的年华 提交于 2019-12-03 12:21:53

问题


Following is link to my init script for unicorn. https://gist.github.com/1466775

Restart command has never worked for me. I am using upgrade to restart unicorn after each deploy. But whenever there is major changes like new gems being added, upgrade won't work. Recently, i replaced hoptoad gem with airbrake and it errors out saying 'uninitialized constant Airbrake (NameError)'. But when i stopped and started unicorn again, it worked fine. Does the problem lies in init script or its different problem?

Thanks.


回答1:


According to your init script, "/bin/init.d/unicorn restart" sends HUP signal to unicorn master process

------cropped

restart|reload)
    sig HUP && echo reloaded OK && exit 0
    echo >&2 "Couldn't reload, starting '$CMD' instead"
    su - $USER -c "$CMD"

-----cropped

This is what HUP does to unicorn process :

reloads config file and gracefully restart all workers. If the “preload_app” directive is false (the default), then workers will also pick up any application code changes when restarted. If “preload_app” is true, then application code changes will have no effect.

What you are looking for is USR2 signal which your upgrade parameter to unicorn is already doing !

USR2 signal re-executes the running binary. A separate QUIT should be sent to the original process once the child is verified to be up and running.




回答2:


I had a very similar problem and finally found the solution

I had looked through the logs before but obviously failed to see the (Bundler::GemfileNotFound) error. Turns out there are old references to earlier releases and once the gem file changes, the new master silently fails. Tail -f your unicorn log to see what happens. My issues were all fixed as per the link with the following in my unicorn.rb

 before_exec do |server|
    ENV['BUNDLE_GEMFILE'] = "#{root}/Gemfile"
 end 



回答3:


I had the same issue, but I was using rbenv which was installed on per user basis. I used this init script

I figured out that since my rbenv installed on per user basis I need to slightly change this:

CMD="cd $APP_ROOT; bundle exec unicorn -D -c $APP_ROOT/config/unicorn.rb -E production"

with this:

CMD="cd $APP_ROOT; ~/.rbenv/bin/rbenv exec bundle exec unicorn -D -c $APP_ROOT/config/unicorn.rb -E production"

Hope it will help you!

P.S. or somebody else since it's an old question =)




回答4:


I fixed this issue by changing my unicorn init.d script from

CMD="cd $APP_ROOT; bundle exec unicorn -D -c $APP_ROOT/config/unicorn.rb -E staging"

to this:

CMD="cd $APP_ROOT; BUNDLE_GEMFILE=$APP_ROOT/Gemfile bundle exec unicorn -D -c $APP_ROOT/config/unicorn.rb -E staging"

Which seems to point to the new bundle gemfile on every new release. Taking inspiration from this merge request



来源:https://stackoverflow.com/questions/8473935/unicorn-restart-upgrade-doesnt-work

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!