Railsの基本設定

Ruby on Railsの環境構築までができたらRailsつまりアプリの設定をします。
普通に考えてルーティングしてサンプルコントローラ作ってDB作って接続してというところまで。

Sampleを立ち上げる

$ 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。
ブラウザーがある場合は、以下のようにアクセスできるようになります。(エラー画面だけど)


Railsを恒久的に起動する

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を実現する

Last update: 2018.08.29 (水)