Os trilhos recarregam rotas dinâmicas em várias instâncias / servidores
Como podemos forçar o Rails a reload_routes em vários servidores / instâncias?
Temos uma plataforma multilocatário no Google App-Engine em execução em mais de 5 instâncias e queremos que todos os nossos sites definam seu próprio conjunto de rotas no back-end. Sempre que temos um novo site, atualmente precisamos reiniciar todos os servidores para poder acessar as novas rotas.
Nós seguimos issoguia mas funciona apenas em um ambiente local e não está atualizando rotas notudo servidores em produção sem reiniciar os servidores.
Nossos arquivos de rota são assim:
routes.rb
Frontend::Application.routes.draw do
root 'home#index'
...
DynamicRoutes.load
end
lib / dynamic_routes.rb
def self.load
Frontend::Application.routes.draw do
Site.all.each do |site|
site.routes.each do |custom_route|
route_name = custom_route[0]
route = custom_route[1]
# write the route with the host constraint
self.constraints(:host => site.hostname) do
case route_name
when :contact_form
mapper.match "#{route}", to: 'contact_forms#new' as: "contact_#{site.id}"
end
...
end
end
end
end
end
def self.reload
Frontend::Application.reload_routes!
end
após cada atualização de rotas ou criação de um novo site, estamos executandoDynamicRoutes::reload