gpt4 book ai didi

ruby-on-rails - 覆盖 Rails 路由器

转载 作者:行者123 更新时间:2023-12-04 19:55:45 25 4
gpt4 key购买 nike

这是我认识的一个奇怪的人。我正在尝试将两个 Rails 应用程序联系在一起,一个 v3 和一个 v2.3.5

我希望他们共享同一个域,并且为了在不更改旧应用程序中的 URL 的情况下做到这一点,我试图找到一种方法来覆盖 Rails 路由器。

我希望较新的应用程序位于域的根目录,而较旧的应用程序位于多个目录下。例如:

/          => app1 # v3
/users => app1
/employees => app2 # v2.3.5
/payrolls => app2

因此,由于 app1 位于根目录并且我使用的是 Passenger,因此我只需在 public 中创建符号链接(symbolic link)即可。 app1 的文件夹到 app2 的公用文件夹,如下所示:
app1/public/employees => app2/public
app1/public/payrolls => app2/public

然后我添加 RailsBaseURI /employeesRailsBaseURI /payrolls到 Apache 的配置。

有了它,我可以使 app2 的旧 URL 工作,但在应用程序内部,链接指向一个前缀。例如, /employees/1 , /employees/employees/1 , /payrolls/employees/1一切正常,但应用程序中的链接指向 /employees/employees/1/payrolls/employees/1取决于我目前使用的前缀。

因此,我需要从链接中删除该前缀,以便只有旧 URL 有效。

我需要这样做才能发布较新的应用程序。及时我会将旧版本升级到 v3 并直接解决这个问题,但现在任何黑客都可以让它工作。

我不希望有一个解决方案,但如果你能指出我在哪里查看 Rails 源代码的正确方向,或者可能是我没有看到的更简单的方法,我将非常感激。

最佳答案

事实证明,只需覆盖 url_for 就很容易了在 ApplicationHelper像这样:

def url_for(options = {})
original = super(options)
# I tried this in order to improve performance:
return original unless original.starts_with?('/employees/employees')
original.gsub('/employees/employees', '/employees')
end

但是,这会导致应用程序出现我无法查明的间歇性错误。我想这是因为性能受到影响。

所以最后我被迫为较新的应用程序使用不同的域。

关于ruby-on-rails - 覆盖 Rails 路由器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5006883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com