【GitHub】プルリクエストを受けたときの動作確認方法で遭遇した数々のエラーの解決策
概要
昨夜、友人たちのGitHub上のソースコードを自分のローカル環境にダウンロードして、実際に彼らが作ったものがどう動くのかを自分のPCで動作確認してみようとした。
しかしまだDockerを使っていない段階のものなので、RubyやRailsのバージョン等の環境が異なるのもあってなのか、うまく動作確認できなかった。
初学者の自分には、GitHubでプルリクエストを受けたときの動作確認方法でも相当苦労したので、今回はそれぞれにエラーと解決法まで列挙・解説していこう。
遭遇したエラー
- BlockedHostError
- ActiveRecord::PendingMigrationError
- Webpacker::Manifest::MissingEntryError
BlockedHostError
問題
エラーの内容
Rails6.0で、任意の host 名を指定してアクセスをしようとしたとき、下記のようなエラーが表示されることがある
Blocked host: hogehoge-host.com
To allow requests to hogehoge-host.com, add the following to your environment configuration:
config.hosts << "hogehoge-host.com"
原因
Rails 6 から追加された、DNSリバインディング攻撃を防止する ActionDispatch::HostAuthorization
middleware によるものであった。
下記の Pull Request で実装された。
DNSリバインディング攻撃とは
攻撃者が、悪意のある Web サイトにユーザーを訪問させ、クライアント側でスクリプトを実行させる。
このとき、攻撃者は短時間にドメイン (FQDN) に対する IP アドレス (Aレコード) を脆弱性のある Web サイトに変更する。
FQDN は変化していないため、同一生成元ポリシーは保たれ、攻撃者の用意したスクリプトで、脆弱性のある Web サイトに対して攻撃を仕掛けることができる。
解決策
Rails.application.config.hostsの設定をclearする
Rails.application.config.hosts
は、空の場合は Host
ヘッダーのチェックが行われないため、ブロックされなくなる。development 環境以外の環境 (たとえば production ) では、 Rails.application.config.hosts
は default で空のため、チェックは行われない。
development 環境で Host
ヘッダーのチェックを行わないようにするには、 config/environments/development.rb
に下記のように記述する。
Rails.application.configure do
config.hosts.clear
end
なお、アプリケーションの前段に Hostヘッダーを識別して振り分けを行うLB等がない場合は、DNSリバインディング攻撃が防止できなくなるため、 development 環境以外ではRails.application.config.hosts
を適切に設定されることをおすすめする。
ActiveRecord::PendingMigrationError
問題
意訳:マイグレーションが保留です
原因
エラーの理由は、migrateし忘れてますよというもの
解決策
$ rails db:migrate
Webpacker::Manifest::MissingEntryError
問題
Webpacker::Manifest::MissingEntryErrorが生じた。
Webpacker::Manifest::MissingEntryError in Atricles#index
Showing /Users/app/views/layouts/application.html.erb where line #9 raised:
Webpacker can't find application.js in /Users/public/packs/manifest.json. Possible causes:
1. You want to set webpacker.yml value of compile to true for your environment
unless you are using the `webpack -w` or the webpack-dev-server.
2. webpack has not yet re-run to reflect updates.
3. You have misconfigured Webpacker's config/webpacker.yml file.
4. Your webpack configuration is not creating a manifest.
Your manifest contains:
{
}
原因
webpakerをインストールできていないだけ
解決策
webpakerをインストールして、compileすれば良い
Webpackerのインストール
$ rails webpacker:install
Webpackerのコンパイル
$ rails webpacker:compile
参考
まとめ
初学者にとっては、まだDockerを活用していない、Railsのアプリケーションの動作確認は手間取るかもしれない。
やり方
-
git clone
する - ブランチを移動する
- 環境が異なるので、バージョンの諸々を微調整をして作成者と同一に合わせる
-
rails s
で開く
素直に、最初方以下の記事を参照にして勉強しておくと効率的かもしれない。
👇
GitHubでプルリクエストを受けたときの動作確認方法
Discussion