😮‍💨

【GitHub】プルリクエストを受けたときの動作確認方法で遭遇した数々のエラーの解決策

2023/04/16に公開

概要

昨夜、友人たちの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 で実装された。
https://github.com/rails/rails/pull/33145

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

参考

https://weseek.co.jp/tech/680/
https://qiita.com/ginger-yell/items/8584e9149496940ea144

まとめ

初学者にとっては、まだDockerを活用していない、Railsのアプリケーションの動作確認は手間取るかもしれない。

やり方

  1. git cloneする
  2. ブランチを移動する
  3. 環境が異なるので、バージョンの諸々を微調整をして作成者と同一に合わせる
  4. rails s で開く

素直に、最初方以下の記事を参照にして勉強しておくと効率的かもしれない。
👇
GitHubでプルリクエストを受けたときの動作確認方法
https://qiita.com/orizin/items/5ebc3d35aad9acaa9a46

Discussion