Rails5.0.1で作成したアプリケーションをHerokuで公開しています。
Rackのmiddlewareを使った301リダイレクトをさせようとしたのですが、後述するコードのように実装してブラウザでアクセスすると、[繰り返しリダイレクトが行われている]とエラーが表示されました。
繰り返しリダイレクトされる原因がif request.host.starts_with?(OLD_DOMAIN)
の条件判定で常にtrue
を返す為かと思ったのですが、どのようにして繰り返し呼び出してリダイレクトしているのでしょうか。
GitHubでRackのcallメソッドが定義されているコード周辺を見てみたのですが理解できず質問しました。
Ruby
1# config/environments/production.rb 2Rails.application.configure do 3 # ... 4 config.middleware.use 'Redirector' 5end
Ruby
1# lib/redirector.rb 2 3class Redirector 4 OLD_DOMAIN = 'herokuAppName' 5 NEW_DOMAIN = 'herokuAppName.com' 6 7 def initialize(app) 8 @app = app 9 end 10 11 def call(env) 12 request = Rack::Request.new(env) 13 14 if request.host.starts_with?(OLD_DOMAIN) 15 location = request.url.sub(OLD_DOMAIN + ".herokuapp.com", NEW_DOMAIN) 16 [301, { "Location" => location, "Content-Type" => 'text/html' }, []] 17 else 18 @app.call(env) 19 end 20 end 21end
Ruby
1# config/application.rb 2require_relative 'boot' 3 4require 'rails/all' 5 6Bundler.require(*Rails.groups) 7 8module AppName 9 class Application < Rails::Application 10 config.time_zone = "Tokyo" 11 12 config.paths.add 'lib', eager_load: true 13 end 14end 15
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/23 08:29
2017/05/24 07:05