読者です 読者をやめる 読者になる 読者になる

AllIsHackedOff

Just a memo, just a progress

Rails5のAPIModeつかってるけどRailsAdminもheroku上でサクッと使いたいよねというお話(失敗談)

API Mode

Rails 5 をAPI modeで動かしている。 * RailsAdminは使いたいよな(管理画面のフロントをSPAで書くのは工数の無駄) * herokuは使いたい(今更deploy周りとかサーバのセットアップとかだるい)

ということで Client -> rack app (routing) -> API @ port 3000 -> Admin (RailsAdmin) @ port 19998

構成

Gemfile
Gemfile.lock
app.rb      
config.ru   
vendor      
web1        
web2
ADMIN_PATH = '/admin'
WEB_SERVER_PORT = 3000
ADMIN_SERVER_PORT = 19899

class SimpleApp
  def call(env)
    request = Rack::Request.new(env)
    request_path = env['REQUEST_PATH']

    if request_path.start_with?(ADMIN_PATH)
      [ 301, {'Location' => "http://localhost:#{ADMIN_SERVER_PORT}#{request_path}" }, self ]
    else
      [ 301, {'Location' => "http://localhost:#{WEB_SERVER_PORT}#{request_path}" }, self ]
    end
  end
  def each(&block)
  end
end

こんな感じでheroku上で動かそうとしたが、そもそもlocalhostヘリダイレクトはクライアント側のローカルホストにリダイレクトされてしまうのでだめですよね。という当然の結論にheroku上で立ち上がっているappサーバにうまく通信しに行く方法はないんだろうか