[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

日々雑記

旅行の事ばっかり。神社成分多め。
Recent Tweets@

タイトルの通り。 ちょっと調べたらDHHのgistが見つかって、割と良さそうだったのでそれをそのまま使用する事にしました。

# config/routes.rb
class ActionDispatch::Routing::Mapper
  def draw(routes_name)
    instance_eval(File.read(Rails.root.join("config/routes/#{routes_name}.rb")))
  end
end

Rails.application.routes.draw do
  draw :api
end
# config/routes/api.rb
namespace :api do
  namespace :v1 do
    resources :users, only: %i(index show)
  end
end

こんな感じ。

一点問題があって、このままだとroutes配下のファイルを更新した際に自動でルーティングの情報が更新されないので、そこは別途リロード用のmiddlewareを作成して対応。

# config/initializers/routes_reloader.rb
class RoutesReloader
  def initialize(app)
    @app = app
    routes_path = Dir.glob("config/routes/*.rb")
    @routes_reloader = ActiveSupport::FileUpdateChecker.new(routes_path) do
      Rails.application.reload_routes!
    end
  end

  def call(env)
    @routes_reloader.execute_if_updated
    @app.call(env)
  end
end

Rails.application.config.middleware.use RoutesReloader if Rails.env.development?

Railsにはファイルの更新を検知する為のFileUpdateCheckerというクラスがあるので、それを使用して対応しました。

これで期待通りに動作する事が確認出来たので当面はこれでやってみよう。

 Text
  1. atm09td reblogged this from y-yagi
  2. y-yagi posted this