どうもてぃです。
unicornの設定でかなり手間取りました。
環境
起きたこと
とある記事を参考にunicornを設定し、ローカルでbundle exec rails unicorn:start
したところ以下のエラーでハマりました。
I, [2019-01-15T16:48:10.401826 #1790] INFO -- : Refreshing Gem list I, [2019-01-15T16:48:11.349098 #1790] INFO -- : unlinking existing socket=/home/user/project/tmp/unicorn.sock I, [2019-01-15T16:48:11.349216 #1790] INFO -- : listening on addr=/home/user/project/tmp/unicorn.sock fd=14 E, [2019-01-15T16:48:11.349315 #1790] ERROR -- : unsupported signal SIGTEAM (ArgumentError) /home/user/project/config/unicorn.rb:11:in `trap' /home/user/project/config/unicorn.rb:11:in `block in reload' /home/user/project/vendor/bundle/ruby/2.5.0/gems/unicorn-5.4.1/lib/unicorn/http_server.rb:543:in `spawn_missing_workers' /home/user/project/vendor/bundle/ruby/2.5.0/gems/unicorn-5.4.1/lib/unicorn/http_server.rb:142:in `start' /home/user/project/vendor/bundle/ruby/2.5.0/gems/unicorn-5.4.1/bin/unicorn:126:in `<top (required)>' /home/user/project/vendor/bundle/ruby/2.5.0/bin/unicorn:23:in `load' /home/user/project/vendor/bundle/ruby/2.5.0/bin/unicorn:23:in `<main>'
おそらく ERROR -- : unsupported signal SIGTEAM (ArgumentError)
これが原因かと。
ローカル環境でやったのがまずかったのかなと思い、GCEのCentOS7上で環境を作ってやってみたのですが、同じエラーが出ました。
やったこと
最初もいいましたが、まず、以下の記事を参考にファイルを作成し設定をしていきました。
bundle exec rails unicorn:start
で作成したタスクを実行したのですが、上記のエラー。
そして、どれだけ探しても同じエラーで詰んでる人がいないという。
と思っていたところ、以下の記事が出てきた。
記事を参考にconfig/unicorn.rb
を変更してみました。
# unicron.rb # set lets $worker = 2 $timeout = 30 $app_dir = "/home/user/project/" #アプリの場所 $listen = File.expand_path 'tmp/unicorn.sock', $app_dir $pid = File.expand_path 'tmp/unicorn.pid', $app_dir $std_log = File.expand_path 'log/unicorn.log', $app_dir # set config worker_processes $worker working_directory $app_dir stderr_path $std_log stdout_path $std_log timeout $timeout listen $listen pid $pid # loading booster preload_app true # before starting processes before_fork do |server, worker| defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect! old_pid = "#{server.config[:pid]}.oldbin" if old_pid != server.pid begin Process.kill "QUIT", File.read(old_pid).to_i rescue Errno::ENOENT, Errno::ESRCH end end end # after finishing processes after_fork do |server, worker| defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection end
これで一旦はbundle exec rails unicorn:start
が動くようになりました。
終わりに
今回の解決策には全くなってないですが、プロジェクトの関係で早く本番環境を作らないといけないので、一旦この方法で落ち着けます。
時間のあるときにもうすこし調査してみます。
誰か解決してくれるといいんだけど。