RoR+ Nginx + Unicorn으로 시작합니다.

7006 단어 nginx루비Rails4

경의



- 평소 RoR로 스스로 정돈하는 환경은 RoR Passenger를 사용하는 것이 많았습니다만 Nginx가 움직이고 있는 환경에서 뭔가하고 싶다고 생각해 보았습니다.
그냥 그냥 ....
초보자가 조금 어려울 것 같은 일을 했다고 생각하는 정도로 바라보세요.

환경



-centos 7
-rails 4.2.6
-nginx 1.6.3

vagrant의 환경은 들어가 있는 것으로 이야기를 진행시켜 갑니다.

CentOS 설치


 $ vagrant box add rails_env https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.1.0/centos-7.0-x86_64.box
 $ vagrant init rails_env
 $ vagrant up

rails 설치


sudo gem install rails

- 조금 시간이 걸립니다.

nginx 설치


sudo yum install nginx

rails 프로젝트 만들기


rails new project名
cd project名

Gemfile 편집 설치


gem 'unicorn'
bundle install

시작 확인


bundle exec rails server -b ip番号

자, 준비가 되었습니다.

unicorn 파일 편집



config/unicorn.rb
@app_path = 'プロジェクトまでのディレクトリ'

worker_processes 2
working_directory "#{@app_path}/"

preload_app true

timeout 30

# socketファイルを生成するディレクトリ
listen "/tmp/unicorn.sock", :backlog => 64
#プロセスIDを生成するディレクトリ
pid "/tmp/unicorn.pid"

#logの場所を指定
stderr_path "#{@app_path}/log/unicorn.stderr.log"
stdout_path "#{@app_path}/log/unicorn.stdout.log"

# USR2シグナルを受けると古いプロセスを止める。
#必要に応じて変えてください
#worker_processes 2 , timeout 10

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
        sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
        Process.kill(sig, File.read(old_pid).to_i)
      rescue Errno::ENOENT, Errno::ESRCH
      end
    end
    sleep 1
  end
after_fork do |server, worker|
  defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection
end

이것으로 유니콘 설정이 완료됩니다.

다음은 nginx입니다.
#最大コネクション数の設定 デフォルトは512でした
events {
  worker_connections  1024;
}
http {

    upstream unicorn_server {
        # unicorn.rbで設定したsockpathを指定
        server unix:/tmp/unicorn.sock
        fail_timeout=0;
    }
    server {
        // 
        listen 80;
        client_max_body_size 4G;
        server_name _;

        keepalive_timeout 5;

        # railsまでのpathを指定
        root rails_project/public;

        location / {
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_redirect off;

            # If you don't find the filename in the static files
            # Then request it from the unicorn server
            if (!-f $request_filename) {
                proxy_pass http://unicorn_server;
                break;
            }
        }

        error_page 500 502 503 504 /500.html;
        location = /500.html {
            root /hoge/vagrant/hage/public;
        }
    }
}

unicorn 시작


bundle exec unicorn_rails -c config/unicorn.rb -E development -D


nginx 시작


sudo nginx



안전하게 시작할 수있었습니다.

chef라든지 docker등으로 세우는 것은 떨어지고 있는 것을 픽업하는 것만으로 좋은 느낌은 합니다만 수동으로 세우면 상당히 시간 걸렸습니다. 어떻게 움직이는지 파악하는 것이 가장 좋습니다.
수고하셨습니다.

좋은 웹페이지 즐겨찾기