{"id":387,"date":"2013-03-08T13:34:17","date_gmt":"2013-03-08T04:34:17","guid":{"rendered":"http:\/\/blog.tanitanin.net\/?p=387"},"modified":"2013-05-27T12:41:35","modified_gmt":"2013-05-27T03:41:35","slug":"rails3%e3%81%ae%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%92nginxunicorn%e4%b8%8a%e3%81%a7%e5%8b%95%e3%81%8b%e3%81%99%e3%83%a1%e3%83%a2","status":"publish","type":"post","link":"https:\/\/blog.tanitanin.net\/?p=387","title":{"rendered":"Rails3\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092nginx+unicorn\u4e0a\u3067\u52d5\u304b\u3059\u30e1\u30e2"},"content":{"rendered":"<p>Rails\u3092nginx\u3068unicorn\u3067\u52d5\u304b\u3059\u3068\u901f\u3044\u3068\u3044\u3046\u30a6\u30ef\u30b5\u3092\u8033\u306b\u3057\u305f\u306e\u3067\uff0c\u3055\u3063\u305d\u304f\u3084\u3063\u3066\u307f\u308b\u3053\u3068\u306b\uff0e<\/p>\n<p>unicorn\u306fgem\u3067\u914d\u5e03\u3055\u308c\u3066\u308b\u306e\u3067\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306f\u7c21\u5358\uff0e<\/p>\n<pre class=\"brush:text; ruler: false;\">\r\n$ gem install unicorn\r\n<\/pre>\n<p>unicorn\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\uff0cconfig\/unicorn.rb\u3068\u3057\u3066\u65b0\u3057\u304f\u4f5c\u6210\u3059\u308b\uff0e<\/p>\n<pre class=\"brush:ruby; ruler: false;\">\r\n# -*- coding: utf-8 -*-\r\n# \u30ef\u30fc\u30ab\u30fc\u306e\u6570\r\nworker_processes 2\r\n\r\n# \u30bd\u30b1\u30c3\u30c8\r\nlisten  '\/tmp\/unicorn.sock'\r\npid     '\/tmp\/unicorn.pid'\r\n\r\n# \u30ed\u30b0\r\nlog = '\/var\/log\/rails\/unicorn.log'\r\nstderr_path File.expand_path('log\/unicorn.log', ENV['RAILS_ROOT'])\r\nstdout_path File.expand_path('log\/unicorn.log', ENV['RAILS_ROOT'])\r\n\r\npreload_app true\r\n\r\nbefore_fork do |server, worker|\r\n defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect!\r\n\r\n old_pid = \"#{ server.config[:pid] }.oldbin\"\r\n unless old_pid == server.pid\r\n  begin\r\n   Process.kill :QUIT, File.read(old_pid).to_i\r\n   rescue Errno::ENOENT, Errno::ESRCH\r\n  end\r\n end\r\nend\r\n\r\nafter_fork do |server, worker|\r\n defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection\r\nend\r\n<\/pre>\n<p>unicorn\u306e\u8d77\u52d5\u306f\uff0cbundle exec unicorn\u307e\u305f\u306funicorn_rails\u3068\u3044\u3046\u30b3\u30de\u30f3\u30c9\u3092\u7528\u3044\u308b\uff0e\u30dd\u30fc\u30c8\u756a\u53f7\u306fnginx\u3068\u304bapache\u3067\u3059\u3067\u306b\u4f7f\u3063\u3066\u3057\u307e\u3063\u3066\u3044\u308b80\u306a\u3069\u3092\u56de\u907f\u3057\u3066\uff0cWEBrick\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u4f7f\u3063\u3066\u305f3000\u3042\u305f\u308a\u3092\u9069\u5f53\u306b\u5229\u7528\u3059\u308b\uff0e<\/p>\n<pre class=\"brush:text; ruler: false;\">\r\n$ bundle exec unicorn --config-file config\/unicorn.rb --listen 127.0.0.1:3000 --env development\r\n<\/pre>\n<p>\u3053\u308c\u3067unicorn\u5074\u306f\u5927\u4e08\u592b\u3060\u304c\uff0c\u6bce\u5ea6\u8d77\u52d5\u3059\u308b\u305f\u3081\u306b\u3053\u308c\u3092\u6253\u3064\u306e\u306f\u6020\u3044\u306e\u3067\uff0c<a href=\"http:\/\/i2bskn.hateblo.jp\/entry\/20121018\/1350532495\" title=\"Rails3.2.8\u74b0\u5883\u69cb\u7bc9(Nginx+Unicorn)\" target=\"_blank\">\u3053\u3053(Nginx+Unicorn)<\/a>\u306e\u3088\u3046\u306b\u8d77\u52d5\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u4f5c\u3063\u3066\u304a\u304f\u3068\u4fbf\u5229\u305d\u3046\uff0e<\/p>\n<p>nginx\u306e\u8a2d\u5b9a\u306fApache\u3068\u5171\u5b58\u3055\u305b\u308b\u305f\u3081\u306b\u3084\u3063\u305f\u30ea\u30d0\u30fc\u30b9\u30d7\u30ed\u30ad\u30b7\u306e\u8a2d\u5b9a\u3068\u307b\u307c\u540c\u3058\u3088\u3046\u306b\u3059\u308c\u3070\u3088\u3044\uff0e<\/p>\n<pre class=\"brush:text; ruler: false;\">\r\n    upstream rails-unicorn {\r\n        server unix:\/tmp\/unicorn.sock;\r\n    }\r\n    server {\r\n        listen 80;\r\n        server_name localhost;\r\n\r\n        client_max_body_size 4G;\r\n        root \/path_to_app\/public;\r\n\r\n        # Reverse proxy setting for Ruby on Rails 3.2\r\n        location \/ {\r\n            proxy_pass http:\/\/rails-unicorn;\r\n            proxy_redirect off;\r\n\r\n            proxy_cache cache1;\r\n            proxy_cache_key $scheme$proxy_host$uri$is_args$args;\r\n            proxy_cache_valid  200 1d;\r\n        }\r\n        location ~ ^\/(assets|images|javascripts|stylesheets|swfs|system)\/ {\r\n            #gzip_static on;\r\n            expires     max;\r\n            add_header  Cache-Control public;\r\n        }\r\n\r\n        error_page 500 502 503 504 \/500.xml;\r\n        location = \/500.xml {\r\n            root \/path_to_app\/public;\r\n        }\r\n    }\r\n<\/pre>\n<p>\u3042\u3068\u306flocalhost:3000\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3066\u52d5\u4f5c\u3059\u308b\u304b\u78ba\u8a8d\uff0e<\/p>\n<p>\u53c2\u8003\uff1a<br \/>\n<a href=\"http:\/\/prototype-beta.com\/server\/entry\/12_ubuntu%E3%81%A7nginx_+_unicorn_-_%E8%A8%AD%E5%AE%9A%E7%B7%A8\" title=\"ubuntu\u3067nginx + unicorn - \u8a2d\u5b9a\u7de8\" target=\"_blank\">ubuntu\u3067nginx + unicorn &#8211; \u8a2d\u5b9a\u7de8<\/a><br \/>\n<a href=\"http:\/\/parrot.hatenadiary.jp\/entry\/20110727\/1311737955\" title=\"Rails3\u30a2\u30d7\u30ea\u3092nginx+unicorn\u3067\u52d5\u304b\u3057\u305f\u3089\u901f\u3059\u304e\u305f\" target=\"_blank\">Rails3\u30a2\u30d7\u30ea\u3092nginx+unicorn\u3067\u52d5\u304b\u3057\u305f\u3089\u901f\u3059\u304e\u305f<\/a><br \/>\n<a href=\"http:\/\/i2bskn.hateblo.jp\/entry\/20121018\/1350532495\" title=\"Rails3.2.8\u74b0\u5883\u69cb\u7bc9(Nginx+Unicorn)\" target=\"_blank\">Rails3.2.8\u74b0\u5883\u69cb\u7bc9(Nginx+Unicorn)<\/a><br \/>\n<a href=\"http:\/\/qiita.com\/items\/118bce7b3a4acb545d79\" title=\"\u82b1\u898b\u306e\u5b63\u7bc0\u306b\u3055\u304f\u3089VPS: Nginx+Unicorn+Rails+Capistrano \" target=\"_blank\">\u82b1\u898b\u306e\u5b63\u7bc0\u306b\u3055\u304f\u3089VPS: Nginx+Unicorn+Rails+Capistrano<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Rails\u3092nginx\u3068unicorn\u3067\u52d5\u304b\u3059\u3068\u901f\u3044\u3068\u3044\u3046\u30a6\u30ef\u30b5\u3092\u8033\u306b\u3057\u305f\u306e\u3067\uff0c\u3055\u3063\u305d\u304f\u3084\u3063\u3066\u307f\u308b\u3053\u3068\u306b\uff0e unicorn\u306fgem\u3067\u914d\u5e03\u3055\u308c\u3066\u308b\u306e\u3067\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306f\u7c21\u5358\uff0e $ gem install unicorn uni [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[73,64],"tags":[],"class_list":["post-387","post","type-post","status-publish","format-standard","hentry","category-rails","category-64"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p5lSjy-6f","jetpack-related-posts":[{"id":272,"url":"https:\/\/blog.tanitanin.net\/?p=272","url_meta":{"origin":387,"position":0},"title":"Ruby on Rails\u3092\u4f7f\u3063\u3066\u307f\u308b\u3053\u3068\u306b\u3057\u305f","author":"tanitanin","date":"2013\u5e742\u67082\u65e5","format":false,"excerpt":"\u524d\u306e\u8a18\u4e8b\u3067Cygwin\u306bRails\u306e\u74b0\u5883\u3092\u4f5c\u308a\uff0c\"project\"\u3068\u3044\u3046\u540d\u524d\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u305f\u2026","rel":"","context":"Rails","block_context":{"text":"Rails","link":"https:\/\/blog.tanitanin.net\/?cat=73"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":397,"url":"https:\/\/blog.tanitanin.net\/?p=397","url_meta":{"origin":387,"position":1},"title":"Rails3.2\u3067Unicorn\u3092\u52d5\u304b\u305d\u3046\u3068\u3057\u3066\u30a8\u30e9\u30fc\u304c\u51fa\u305f\u3068\u304d\u306e\u5bfe\u51e6\u30e1\u30e2","author":"tanitanin","date":"2013\u5e743\u67088\u65e5","format":false,"excerpt":"Unicorn\u3092development\u30e2\u30fc\u30c9\u3067\u52d5\u304b\u305d\u3046\u3068\u3057\u305f\u3068\u304d\u306b\uff0cCould not find a\u2026","rel":"","context":"Rails","block_context":{"text":"Rails","link":"https:\/\/blog.tanitanin.net\/?cat=73"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":302,"url":"https:\/\/blog.tanitanin.net\/?p=302","url_meta":{"origin":387,"position":2},"title":"Rails3\u3067OmniAuth\u3092\u4f7f\u3063\u3066\u8a8d\u8a3c\u6a5f\u80fd","author":"tanitanin","date":"2013\u5e742\u670824\u65e5","format":false,"excerpt":"Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u3064\u304f\u308b\u3068\u304d\u306b\u4e00\u756a\u5927\u4e8b\u306a\u306e\u304c\u30ed\u30b0\u30a4\u30f3\u6a5f\u80fd\uff0e\u6700\u8fd1\u306fTwitter\u3068\u304bFacebo\u2026","rel":"","context":"Rails","block_context":{"text":"Rails","link":"https:\/\/blog.tanitanin.net\/?cat=73"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":472,"url":"https:\/\/blog.tanitanin.net\/?p=472","url_meta":{"origin":387,"position":3},"title":"Capistrano v3\u3092\u8a66\u3057\u3066\u307f\u308b(1)","author":"tanitanin","date":"2013\u5e7410\u67088\u65e5","format":false,"excerpt":"\u3053\u3093\u306b\u3061\u306f\uff0c\u305f\u306b\u305f\u306b\u3067\u3059\uff0e Deploy\u306e\u305f\u3081\u306e\u30c4\u30fc\u30eb\u3068\u3057\u3066\u6709\u540d\u306aCapistrano\u3067\u3059\u304c\uff0c6\u6708\u306b\u2026","rel":"","context":"\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0","block_context":{"text":"\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0","link":"https:\/\/blog.tanitanin.net\/?cat=64"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":263,"url":"https:\/\/blog.tanitanin.net\/?p=263","url_meta":{"origin":387,"position":4},"title":"Cygwin\u3067Ruby on Rails\u306e\u74b0\u5883\u3065\u304f\u308a","author":"tanitanin","date":"2013\u5e742\u67082\u65e5","format":false,"excerpt":"Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u52c9\u5f37\u306b\u3068Ruby on Rails\u3092\u3044\u3058\u3063\u3066\u307f\u308b\uff0e \u74b0\u5883\u306fCygwin + \u2026","rel":"","context":"Rails","block_context":{"text":"Rails","link":"https:\/\/blog.tanitanin.net\/?cat=73"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":360,"url":"https:\/\/blog.tanitanin.net\/?p=360","url_meta":{"origin":387,"position":5},"title":"nginx\u306e\u8a2d\u5b9a","author":"tanitanin","date":"2013\u5e743\u67081\u65e5","format":false,"excerpt":"\u3055\u304f\u3089VPS\u3067apache\u304b\u3089nginx\u3078\u79fb\u884c\u3057\u3088\u3046\u304b\u3068\u601d\u3063\u3066\u5165\u308c\u305f\u6642\u306e\u8a2d\u5b9a\u3092\u5fd8\u308c\u306a\u3044\u305f\u3081\u306e\u30e1\u30e2\uff0e \u2026","rel":"","context":"\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0","block_context":{"text":"\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0","link":"https:\/\/blog.tanitanin.net\/?cat=64"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/blog.tanitanin.net\/index.php?rest_route=\/wp\/v2\/posts\/387","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.tanitanin.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.tanitanin.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.tanitanin.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.tanitanin.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=387"}],"version-history":[{"count":19,"href":"https:\/\/blog.tanitanin.net\/index.php?rest_route=\/wp\/v2\/posts\/387\/revisions"}],"predecessor-version":[{"id":421,"href":"https:\/\/blog.tanitanin.net\/index.php?rest_route=\/wp\/v2\/posts\/387\/revisions\/421"}],"wp:attachment":[{"href":"https:\/\/blog.tanitanin.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=387"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.tanitanin.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=387"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.tanitanin.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=387"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}