DACエンジニアブログ:アドテクゑびす界

DACのエンジニアやマーケター、アナリストが執筆するアドテクの技術系ブログです。

AWSにRailsアプリをデプロイする(公開編)

次にデプロイするため"aws rails デプロイ"でググってみるとunicornnginxというキーワードがでてくるので とりあえずこれを設定していきます。


 

アプリのsecret_key_baseの設定
$ vi config/secrets.yml
$ production:
$ secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
//keyを生成する
$ bundle exec rake secret
//生成したkeyを環境変数に設定する
$ export SECRET_KEY_BASE=
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Unicornの設定
$ vi Gemfile
$ gem 'unicorn'
$ bundle install
$ vi config/unicorn.rb

@app_path = '/home/xxxx/app-name/'
working_directory @app_path

worker_processes 2
preload_app true
timeout 30
listen "/tmp/unicorn.sock", : backlog => 64
pid "/home/youser/tag-manager/tag-manager/shared/tmp/pids/unicorn.pid"

stderr_path "#{@app_path}/log/unicorn.stderr.log"
stdout_path "#{@app_path}/log/unicorn.stdout.log"

before_fork do |server, worker |
 ENV['BUNDLE_GEMFILE'] = File.expand_path('Gemfile', ENV['RAILS_ROOT'])
end

before_fork do |server, worker |
 if defined ? (ActiveRecord::Base)
ActiveRecord::Base.connection.disconnect!
 end

old_pid = "#{server.config[:pid]}.oldbin"
if File.exists ? (old_pid) && server.pid != old_pid
begin
Process.kill("QUIT", File.read(old_pid).to_i)
rescue Errno::ENOENT, Errno::ESRCH
end
end
end

after_fork do |server, worker |
 if defined ? (ActiveRecord::Base)
ActiveRecord::Base.establish_connection
end
end
Nginxのインストール
$ sudo yum install nginx -y
Nginxの設定
$ vi /etc/nginx/conf.d/app-name.conf
upstream unicorn_server {
 server unix: /tmp/unicorn.sock
 fail_timeout = 0;
}

server {
 listen 80;
 client_max_body_size 4 G;
 server_name * .xxxxx.compute.amazonaws.com; #サーバーネーム記載

 keepalive_timeout 5;

# Location of our static files
 root / home / xxxx / app - name;#
 appname部分は自分自身で設定

 location~ ^ /assets/ {
 root / home / xxxx / app - name / public; #修正後
 }

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

 if (!-f $request_filename) {
 proxy_pass http: //unicorn_server;
 break;
 }
 }

 error_page 500 502 503 504 / 500. html;
 location = /500.html {
 root / home / xxxx / app - name;
}
}

※サーバーネームをAWSのDNS設定にしたら長すぎると怒られたのでとりあえず*にしたら通った

Nginxの起動
$ sudo service nginx start
Nginxの再起動
$ sudo service nginx reload
//アプリのディレクトリに移動
$ cd /home/xxxx/app-name
Unicornの起動
$ bundle exec unicorn_rails -c /home/xxxx/app-name/config/unicorn.rb -p 8080 -D -E production
Unicornの起動確認
ps -ef | grep unicorn | grep -v grep

ついに、、

ページの確認♡ http://xxxxx.compute.amazonaws.com/

参考URL


Amazon LinuxにRuby on Rails環境構築(rbenv + ruby-build + Ruby 2.2.1 + Rails 4.2.1インストール) http://qiita.com/na0AaooQ/items/5bd62e630a2faf051a52

(デプロイ編①)世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで http://qiita.com/naoki_mochizuki/items/814e0979217b1a25aa3e