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サーバにうまく通信しに行く方法はないんだろうか