-
Star
(290)
You must be signed in to star a gist -
Fork
(54)
You must be signed in to fork a gist
-
-
Save dhh/2492118 to your computer and use it in GitHub Desktop.
class ActionDispatch::Routing::Mapper | |
def draw(routes_name) | |
instance_eval(File.read(Rails.root.join("config/routes/#{routes_name}.rb"))) | |
end | |
end | |
BCX::Application.routes.draw do | |
draw :api | |
draw :account | |
draw :session | |
draw :people_and_groups | |
draw :projects | |
draw :calendars | |
draw :legacy_slugs | |
draw :ensembles_and_buckets | |
draw :globals | |
draw :monitoring | |
draw :mail_attachments | |
draw :message_preview | |
draw :misc | |
root to: 'projects#index' | |
end |
@sharipov-ru, it's much better but I'd like to add a small improvement:
ActiveSupport::FileUpdateChecker.new([], 'config/routes' => 'rb') do ... end
This way it should find new files as well.
Guys, it's very outdated. You now can just require other routes files without monkey patching, they just have to repeat the Rails.application.routes.draw do
:
config/routes.rb:
Rails.application.routes.draw do
load Rails.root.join("config/routes/dev.rb")
#...
end
config/routes/dev.rb:
Rails.application.routes.draw do
scope "dev" do
# ...
end
end
No dynamic reloading tho, probably @sharipov-ru's reloader still works.
Anyone found a nice solution on how to seperate route files and still make them auto reloading during development?
Edit: Going now with a combination of the mentioned solutions...
# config/environments/development.rb
class RoutesReloader
def initialize(app)
@app = app
@routes_reloader = ActiveSupport::FileUpdateChecker.new([], 'config/routes' => 'rb') do
Rails.application.reload_routes!
end
end
def call(env)
@routes_reloader.execute_if_updated
@app.call(env)
end
end
Rails.application.routes.draw do
...
config.middleware.use RoutesReloader
end
# config/routes.rb
Rails.application.routes.draw do
routes = [:admin_routes, :admin_routes_old, :public_routes, :api_routes]
routes.each{ |route_file| load Rails.root.join("config", "routes", "#{route_file}.rb") }
end
How can I use concern with this conven?
https://guides.rubyonrails.org/routing.html#routing-concerns
concern :commentable do
resources :comments
end
resources :messages, concerns: :commentable
can I do this?
draw :api, concerns: :commentable
or there another way?
@shime it works, but makes application very slow:
It adds more than 450 ms for every request.
Hopefully there is still other possible solution: we can use
ActiveSupport::FileUpdateChecker
for tracking changes in config/routes directory: