Ruby on Railsの環境構築までができたらRailsつまりアプリの設定をします。
普通に考えてルーティングしてサンプルコントローラ作ってDB作って接続してというところまで。
$ rails new sample
$ cd sample
$ gem update --system
$ gem install rails
$ gem install sqlite3-ruby
$ gem install uglifier
$ gem install bundler
$ rails s -p 3001
=> Booting Puma
=> Rails 5.2.1 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.0 (ruby 2.5.1-p57), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://localhost:3001
Use Ctrl-C to stop
node.jsが3000で起動してたので「rails s」だと3000で起動するので失敗した。明示的に別のポートを設定してあげるとOK。
http://localhost:3001/
サーバー内とかだったら、
curl -I localhost:3001
200が返ってきたらOK。
ブラウザーがある場合は、以下のようにアクセスできるようになります。(エラー画面だけど)
nodeのForeverとかみたいなものにあたるんでしょうか。Railsをuniconで起動します。
$ cd sample
($ cd <アプリ名>)
Railsアプリに移動します。
vi Gemfile
以下追加(もしかしたらコメントインするだけでOKかもしれない)
# Adding
gem 'unicorn'
gem 'therubyracer', :platforms => :ruby
保存したら、
bundle install
これでOK
$ gem install unicorn
$ rbenv rehash
uniconのconfを設定
cd sample
gem install unicorn
vi config/unicorn.rb
以下記述
stdout_path File.expand_path('../../log/unicorn_stdout.log', __FILE__)
# Nginxで使用する場合は以下の設定を行う。
# listen File.expand_path('../../tmp/sockets/unicorn.sock', __FILE__)
# とりあえず起動して動作確認をしたい場合は以下の設定を行う。
listen 8000
# ※「backlog」や「tcp_nopush」の設定もあるけど、よくわかって無い。
# プロセスの停止などに必要なPIDファイルの保存先を指定。
pid File.expand_path('../../tmp/pids/unicorn.pid', __FILE__)
# 基本的には`true`を指定する。Unicornの再起動時にダウンタイムなしで再起動が行われる。
preload_app true
# 効果なしとの記事を見たので、コメントアウト。
# GC.respond_to?(:copy_on_write_friendly=) and GC.copy_on_write_friendly = true
# USR2シグナルを受けると古いプロセスを止める。
# 後述するが、記述しておくとNginxと連携する時に良いことがある。
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
end
after_fork do |server, worker|
defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection
end
Railsをuniconで起動
bundle exec unicorn_rails -c config/unicorn.rb
確認
curl -I http://localhost:8000
EC2 : Rails, MySQL, Redis, nginx, Unicorn 環境構築
AWSのEC2上でRails+Unicorn+Nginxを実現する