【Cloud9】Ruby on Rails 6でサイトを公開するための環境構築

Rails5だったら、インストールしたらすぐにrails sでサイトが公開できたんですが、Rails6からはWebpackの機能が追加され、これを入れないとエラーになります。よくウェブでRailsの使い方を見ていても、ここをすっ飛ばしてるサイトがおおいので、ここでまとめておこうかなと。

cloud9を使うためのアカウント開設等の手順は省きます。

Railsをインストール

まずはCloud9でRailsをインストールします。
ぜひコピペして使ってください

$ printf "install: --no-rdoc --no-ri\nupdate:  --no-rdoc --no-ri\n" >> ~/.gemrc

$ gem install rails

インストールが完了したかと思います。

Railsアプリケーションを作成

rails new xxxx_app

すこし時間がかかります。終われば、ディレクトリを移動しましょう

$ cd xxxx_app

Yarnとwebpackerをインストール

#yarnをインストール
$ npm install -g yarn
$yarn -v
1.17.3
#webpackerをインストール
$ rails webpacker:install

Blocked hostの対策

必要なものはインストールし終わりました。しかしこの状態でrails sでサーバーを起動しても、サイトには赤い文字が出て、xxxxx. .xxx.amazonaws.comというふうにエラーが出ます。
これはホストを許可する必要があります。

config/environments/development.rb

Rails.application.configure do
(略〜〜)
  config.hosts << "xxxxx.xxxx.amazonaws.com"
end

なぜこうなるのかというと、Rails6へのアップデート時の変更でDNSバインディング攻撃からの保護を導入
が原因です。
Ruby on Rails 6.0 リリースノート - Railsガイド

Runtime Error Your version of SQLite (3.7.17) is too old. Active Record supports SQLite >= 3.8 のエラー対処

sqliteのバージョンが古いので、バージョンを上げます。

curl -O https://www.sqlite.org/2020/sqlite-autoconf-3360000.tar.gz
tar xzvf sqlite-autoconf-3360000.tar.gz
cd sqlite-autoconf-3360000

sqlite-autoconf-3360000.tar.gzのところは都度最新版を使ってください。
SQLite Download Page
競合しないように、パスを変更

$ ./configure  --prefix=/opt/sqlite/sqlite3
$ make
$ sudo make install
#バージョン確認
/opt/sqlite/sqlite3/bin/sqlite3 --version
 
#結果
3.31.1

gemをアンスト

$ gem uninstall sqlite3

sqlite3を指定してインストールします。

$ gem install sqlite3 -- --with-sqlite3-include=/opt/sqlite/sqlite3/include --with-sqlite3-lib=/opt/sqlite/sqlite3/lib

以上の手順で、問題なくサーバー起動できると思います。