LoginSignup
54
32

More than 3 years have passed since last update.

Railsを5.2から6.0へアップデートする時にハマったポイント

Last updated at Posted at 2019-04-28

Rails5.2で作ったシステムを6.0にアップデートした際に、ハマったポイントをまとめました。

元のバージョン アップデートしたバージョン
5.2.2 6.0.0.beta3

1. Webpackerの標準インストール

Rails6では、Webpackerが標準でインストールされるようになりました。

というわけで、Rails5.2まででWebpackerを入れていなかった場合は、インストールしましょう。

$ bundle exec rails webpacker:install

2. CoffeeScriptからES2015(ES6)への変換

Rails6では、ActionCableのjavascriptパッケージがCoffeeScriptからES2015(ES6)に変換されました。

というわけで、もしRails5.2まででCoffeeScriptを使っていると、以下のエラーが発生します。

LoadError: cannot load such file -- coffee_script

これは、tmpディレクトリ下のキャッシュをクリアすればOKです。

$ bundle exec rails tmp:cache:clear

3. ActionDispatch::HostAuthorizationの導入

Rails6では、DNSリバインディングHostヘッダインジェクションの対策として、ActionDispatch::HostAuthorizationが導入されました。

3-1. ActionDispatch::HostAuthorizationとは?

ActionDispatch::HostAuthorizationは新たに追加されたミドルウェアで、ホワイトリストによってホストを認証します。
ホワイトリストによる認証なので、リストに登録されたホストは通しますが、それ以外のホストへのリクエストはエラーになります。

3-2. デフォルト設定

デフォルトでは、developmentにのみ以下3つの値が指定されています。

Rails.application.config.hosts = [
  IPAddr.new("0.0.0.0/0"), # All IPv4 addresses.
  IPAddr.new("::/0"),      # All IPv6 addresses.
  "localhost"              # The localhost reserved domain.
]

というわけで、IPとlocalhostへのリクエストはデフォルトで通ります。

stagingproductionなどdevelopment以外の環境は、デフォルトでは何も指定されていないので、自分で一からホストを指定する必要があります。

3-3. ホストの指定

ホストを指定する時は、Rails.application.config.hostsに以下のように追加します。

myapp/config/application.rb
module MyApp
  class Application < Rails::Application
...
    config.hosts << "product.com"
...
  end
end

また、以下の形で追加すると全てのサブドメインを指定することができます。

myapp/config/application.rb
config.hosts << ".product.com"

3-4. エラーメッセージ

ちなみに、3-3. ホストの指定 を行わずにproduct.comでアクセスしようとすると、以下のエラーメッセージが出力されます。

Blocked host: product.com
To allow requests to product.com, add the following to your environment configuration:
config.hosts << "product.com"

やはりRailsのエラーメッセージは、対応方法まで親切に教えてくれますね。

54
32
10

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
54
32