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

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

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

Railsをインストール

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

# インストール
$ gem install rails -v 6.1.4
#バージョン確認
$ rails -v
Rails 6.1.4

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

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のバージョンが古いので、バージョンを上げます。

$ wget https://www.sqlite.org/2022/sqlite-autoconf-3370200.tar.gz
#解凍
$ tar xzvf sqlite-autoconf-3370200.tar.gz
cd sqlite-autoconf-3370200

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

$ sudo mv sqlite-autoconf-3370200 /opt/sqlite3

$ cd /opt/sqlite3
#インストールディレクトリを設定。これには--prefixを使う。
#--prefixに/usrを指定で、OSの標準的なディレクトリにインストールすることになる

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

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