RailsにRackアプリケーションをマウントしてみた
思ったよりも簡単です。やることをざっくり言うと、
- Railsにパスを通す
- ルートにマウント
の2つだけです。
Railsにパスを通す
たとえばapp/api/以下にSinatraとかGrapeとかを置いておきたいとしましょう。そうしたら、config/application.rbに
config.paths.add "app/api", glob: "**/*.rb" config.autoload_paths += Dir["#{Rails.root}/app/api/*"]
と書いておきます。
ルートにマウント
終わったらconfig/routes.rbのルーティングを編集します。
mount Api => "/"
みたいな感じでマウントできます。たぶん上のようにルートにマウントするのが無難です、たぶんね。
お疲れ様でした。でも…
以上です。簡単ですね。
でも、ただ置いただけだと、Deviseなんかの認証プラグインは面倒見てくれません。一応ログを見ると認証しているようではあるんですけど、失敗しても弾いてくれませんwこれはダメだ…えっと、このへんの対策はもう少し調べてからあとで書きます。
Sinatraをマウントするときの注意点
require 'sinatra' get '/' do '北上さん' end
こういうのはマウントできません。
require 'sinatra' class SuperKitagami < Sinatra::Base get '/' do 'スーパー北上さん' end end
これならマウントできます。