Cent OSにRuby on Rails + puma + nginx の構成で環境を作ってみた
準備
git のインストール
$ sudo yum install git
yum で必要なライブラリをインストール
$ sudo yum -y install openssl-devel readline-devel zlib-devel
rbenv のインストール
公式 git から clone します
$ cd /opt/
$ sudo git clone git://github.com/sstephenson/rbenv.git
$ sudo mkdir /opt/rbenv/plugins
$ cd /opt/rbenv/plugins
$ sudo git clone git://github.com/sstephenson/ruby-build.git
/etc/profile 設定
vi エディタ等で、/etc/profile に以下の3行を追加します。
export RBENV_ROOT="/opt/rbenv"
export PATH="${RBENV_ROOT}/bin:${PATH}"
eval "$(rbenv init -)"
以下のコマンドを入力して反映
$ source /etc/profile
rbenv にパスが通った事とバージョン確認
$ rbenv -v
rbenv を使用して Rubyのインストール
インストール可能な Ruby のバージョンを一覧表示
rbenv install -l
Ruby 2.3.1 をインストール
rbenv install 2.3.1
トラブルシューティング
以下のようなエラーが出る場合、Cent OS の libcurl が古い可能性があるので、
libcurlをアップデートする必要がああります。
error: failed to download ruby-x.x.x.tar.bz2
アップデート手順
Ciry-fanリポジトリの追加
sudo rpm -Uvh http://www.city-fan.org/ftp/contrib/yum-repo/city-fan.org-release-2-1.rhel6.noarch.rpm
*上記 URL 2018/6/14時点のものです、
バージョンアップ等で変わっている可能性があるため、以下のサイトで最新のURLを確認して下さい。
http://www.city-fan.org/ftp/contrib/yum-repo/
設定ファイル編集
追加したリポジトリが無効になっている場合、有効にします。 (enabled=0)
$ sudo vim /etc/yum.repos.d/city-fan.org.repo
[city-fan.org]
name=city-fan.org repository for Red Hat Enterprise Linux (and clones) $releasever ($basearch)
#baseurl=http://mirror.city-fan.org/ftp/contrib/yum-repo/rhel$releasever/$basearch
mirrorlist=http://mirror.city-fan.org/ftp/contrib/yum-repo/mirrorlist-rhel$releasever
#enabled=1
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-city-fan.org
–enablerepo=city-fan.org をつけてlibcurlをアップデートします。
$ sudo yum update --enablerepo=city-fan.org libcurl
以下のコマンドで正常にインストールされたか確認します
バージョンが変わっていれば、インストール成功です。
$ yum info libcurl
名前 : **libcurl**
アーキテクチャ : x86_64
バージョン : 7.60.0
Ruby 2.3.1をシステム標準のバージョンとして設定します
rbenv global 2.3.1
Rubyのバージョンを確認
ruby -v
Rails のインストール
gem のアップデート
gem のバージョンを確認します。
gem -v
gem のアップデートを行います。
環境によっては、管理者権限が必要な場合があります。
$ gem update --system
Rails のインストール
sqLite がインストールされている事を確認します。
以下のコマンドでバージョンが表示できればOKです。
$ sqlite3 --version
以下のコマンドで、Rails をインストールします。
$ gem install rails
~~ インストールが終わると以下のような表示があります~~
38 gems installed
インストール後、バージョンを確認します。
$ rails --version
~~ バージョンの表示 ~~
Rails 5.2.0
Rails アプリケーションの作成
# ソースコードを格納するフォルダへ移動します
cd path/to/dir
# 以下のコマンドを実行してアプケーションを作成します
rails new アプケーション名
# 作成された Rails アプリケーションフォルダに移動します
cd アプケーション名
トラブルシューティング
アプリケーション作成中に、sqLite の箇所で以下のようなエラーが表示される事があります。
An error occurred while installing sqlite3 (1.3.13), and Bundler cannot continue.
sqlite-devel
インストールされていない可能性があるため、
以下のコマンドでインストールします。
sudo yum install sqlite-devel
アプリケーションの再作成が必要な為、作成したフォルダを削除します。
rm -rf アプリケーションのディレクトリ
削除後、rails new アプケーション名
で Rails アプリケーションを再度作成します。
WEBサーバの起動
以下のコマンドを入力し、開発用 webサーバを起動します。
rails server
起動後、localhost:3000 にアクセスし、Rails の初期ページが表示されれば成功です。
nginx + puma + rails 連携
本番環境では、webサーバ + puma + rails で運用するのが一般です。
nginx + puma + rails の連携について記載していきます。
config/puma.rb の編集
以下の内容を、puma.rb の先頭に追記して下さい。
_proj_path = "#{File.expand_path("../..", __FILE__)}"
_proj_name = File.basename(_proj_path)
pidfile "/var/run/puma/rails_#{_proj_name}.pid"
bind "unix:/var/run/puma/rails_#{_proj_name}.sock"
directory _proj_path
nginx の conf ファイルを作成
## xxxx の部分はは、作成した Rails アプケーション名に変更してください。
upstream app {
server unix:/var/run/rails_xxxx.sock;
}
## listen, server_name, root は環境に合わせて書き換えて下さい。
server {
listen 3001;
server_name 127.0.0.1;
root /path/to/rails_app_root/public;
try_files $uri/index.html $uri @app;
location / {
proxy_pass http://app;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
}
error_page 500 502 503 504 /500.html;
client_max_body_size 100m;
keepalive_timeout 10;
}
nginx を再起動
sudo service nginx restart
sock ファイル格納ディレクトリ作成
config/puma.rb`で指定した名前のディレクトリを作成します。
mkdir /var/run/puma
puma の起動 (開発環境用)
puma -w 4
puma の起動 (本番環境用)
rails assets:precompile RAILS_ENV=production
SECRET_KEY_BASE=$(rake secret) RAILS_SERVE_STATIC_FILES=true
トラブルシューティング
puma コマンドが見つからないエラーになった場合
rbenv の shims ディレクトリに、puma 用のプロキシシェルが存在するか確認します。
# cd /opt/rbenv/shims
# ls
上記で puma
が存在しない場合、他のプロキシシェルをコピーして、
puma 用のプロキシシェルを作成します。
# 中身は同じなので、適当に ruby のプロキシシェルをコピー
# cp ruby puma
puma コマンドが正しく通るか確認するため、バージョンを表示
# puma -version
Puma starting in single mode...
* Version 3.11.4 (ruby 2.3.1-p112), codename: Love Song
* Min threads: 0, max threads: 16
* Environment: rsion
502 Gateway エラーになる場合
sock ファイルの所有者および、sock ファイルを格納しているディレクトリの所有者が
nginx を実行しているユーザでないと、正しく動作しない事があるので、
ファイルおよびディレクトリの所有者を変更してみて下さい。
0 件のコメント:
コメントを投稿