对于NodeJS世界中的大多数事情,例如Express,我可以轻松调用实际修改Express应用程序的服务器上的方法。例如...如果我想在运行时创建一个新路由,我可以调用我在服务器上执行的方法来执行一些Express API方法来创建一个新路由,然后路由才会开始工作。没有服务器重启或重新加载。
有没有办法在Rails中执行此操作?我们可以坚持在运行时添加路由的示例,或者其他任何假设您理解问题的方法。
答案 0 :(得分:3)
在某种意义上是 - 在启动过程中没有任何神奇的东西会阻止后续修改。例如,如果你运行
Rails.application.routes.append do
get '/waffles', to: 'home#index'
end
从您应用中的某个位置,您将添加该新路线。但是你只是将它添加到rails应用程序的那个实例中。通常,您的应用程序有多个实例,因此只有其中一个实例可以定义该路径。您需要一些额外的机制来确保所有实例都选择它。
答案 1 :(得分:2)
这是可能的,但它在技术上很复杂,很脆弱,并且取决于您用来运行应用程序的服务器。这是一个非常糟糕的主意。
Rails应用程序在服务器进程内运行,生产默认设置是在服务器启动时加载应用程序文件。
理论上,您可以使用 plain old ruby 来修改源代码文件以响应某些HTTP请求,然后触发命令以重新启动应用程序服务器(不同的服务器具有不同的接口)。 重新启动时,服务器将获取代码更改。
这是一件坏事,不应在制作中执行此操作。
最好提前计划,并考虑您想要实施的不同替代行为。您可以拥有一些控制应用程序行为或路由的配置数据,并使用HTTP请求修改配置。
如果您对动态路线特别感兴趣,this answer可以给您一些指示。