Cloud9でRails6の開発環境を構築した際、少し苦労したので以下備忘録として。
Railsをインストール
Rails6を使いたかったのでgem search rails
でバージョンを確認してインストール。
gem install rails -v 6.1.4
Rails6からwebpackerが標準になったことにより、Railsアプリの開発環境にyarnのインストールが必要になっているので、以下の記事を参考にNode.js, yarn, webpackerを順にインストールしていきます。
https://qiita.com/yamori/items/974e4775eb1d21aa7889
https://qiita.com/pharma_tech3/items/2ab578eb5b07ff0ca296
Node.js, yarn, webpackerをインストール
まずHomebrewを入れようと思ったのですがnpm -v
で確認したらnpmはすでに入っていたので割愛。
次にyarnをインストールします。
npm install -g yarn
yarn -v
アプリケーション作成
rails new
でアプリケーションを作成して、cdしてからwebpackをインストールします。
rails webpacker:install
とりあえずrails s
してみたのですが、ブラウザからアクセスすることができませんでした。
リクエストを許可するホストを設定
Rails6でDNSリバインディング攻撃からの保護機能が追加されているので、許可するホストを自分で設定します。
回避方法1: ホワイトリストに許可したいhostを追加したい場合
config.hosts << "許可したいホスト名"
回避方法2: ホワイトリスト全体をクリアしたい場合
config.hosts.clear
回避方法2の場合全てのリクエストが通過してしまうので、回避方法1の設定を追記します。
ここでもう一度rails s
してプレビューしてみると、今度は以下のように怒られました。
Your version of SQLite (3.7.17) is too old. Active Record supports SQLite >= 3.8.
SQLite3をアップデート
Rails6ではSQLite3.8以上が必要なので、ダウンロードページなどでバージョン情報を確認して、
homeへcdして以下を実行します。
wget https://www.sqlite.org/2021/sqlite-autoconf-3360000.tar.gz
tar xzvf sqlite-autoconf-3360000.tar.gz
cd sqlite-autoconf-3360000
念のためwhich sqlite3
で確認してから、もとから入っているsqliteと競合しないように /opt/sqlite/sqlite3 でビルドしてインストールしていきます。
./configure --prefix=/opt/sqlite/sqlite3
make
sudo make install
/opt/sqlite/sqlite3/bin/sqlite3 --version
Railsアプリ直下へcdして作業ディレクトリにsqlite3のgemを入れ直します。
gem uninstall sqlite3
gem install sqlite3 -- --with-sqlite3-include=/opt/sqlite/sqlite3/include \ --with-sqlite3-lib=/opt/sqlite/sqlite3/lib
不要なファイルは削除しておきます。
rm sqlite-autoconf-3310100.tar.gz
rm -rf ./sqlite-autoconf-3310100
以下の記事を参考にパスを通しておきます。
https://qiita.com/Taku3939/items/76356f46f53946962d2e
echo 'export PATH=/opt/sqlite/sqlite3/bin:"$PATH"' >> ~/.bashrc
ここまでやって作業ディレクトリのsqlite3が更新できたことを確認できました。
sqlite3 --version
3.36.0
しかし、まだrails s
してもちゃんと動いてくれません。
以下を参考にもう一度gemを入れ直してみます。
https://mebee.info/2021/01/13/post-27973/
gem uninstall sqlite3
gem install sqlite3 -- --with-sqlite3-include=/opt/sqlite/sqlite3/include --with-sqlite3-lib=/opt/sqlite/sqlite3/lib
起動時に大量のwarningは大量に出るものの、なんとかrails s
はできるようになりました。
Warningの解消
Gemを入れ直してから_already initialized_というwarningが大量に出るようになってしまったので、最後にこれも解消しておきます。
1行ずつエラーメッセーを確認して、Gemの読み込みで怒られている場合は必要に応じて以下を実行します。
gem uninstall etc
gem uninstall forwardable
ここまででやっと問題なくrails s
できるようになりました!