0

在生产中,我们的 rails 3.1.4 应用程序被部署到 suburi server_ip/by。部署到 suburi /by 需要在调用 link_to 时将 /by 附加到自定义方法“view_handler”(用于记录观看历史)前面。以下是 Rails 生产中的示例:

<%= link_to 'Projects', "/by/view_handler?index=1&url=#{projects_path}" %>

但是,在开发或测试环境中,不需要“/by”(会导致错误),并且 link_to 看起来像:

<%= link_to 'Projects', "/view_handler?index=1&url=#{projects_path}" %>

在 routes.rb 中,我们有:

  match '/view_handler', :to => 'application#view_handler'

有没有办法只在 rails 环境或 routes.rb 中设置而不更改 rails 代码本身以进行 suburi 部署?或者我们如何才能在 Rails 生产中只为 link_to 附加 suburi?

4

3 回答 3

3

尝试:

  scope(Rails.env=='production' ? '/by' : '') do
    resources :foos
    ....
  end
于 2012-05-07T17:35:33.310 回答
1

我不确定我是否理解正确,但我可以想到两件事来尝试:

1)将您的生产路线放在您的开发路线前面,在 routes.rb 中。Rails 会先尝试匹配它,如果你在 dev/test 中它会失败,然后尝试匹配 dev/test 路由并成功。如果您在生产中,它当然会匹配第一条路线。

2) 将两条路线包装在条件语句中,Rails.env.production?用于根据环境确定要绘制的路线,例如

if Rails.env.production?
  match #production route
else
  match #dev/test route
于 2012-05-07T17:09:19.197 回答
0

这是我们决定用于解决路由中断问题的方法。在初始化程序中,my_constant.rb 是通过以下方式创建的:

if Rails.env.production?
  SUBURI = "/by"
else
  SUBURI = ''
end

在每个 /view_handler 之前,添加 SUBURI。例如,

<%= link_to 'Projects', "/view_handler?index=1&url=#{projects_path}" %>

变成:

<%= link_to 'Projects', SUBURI + "/view_handler?index=1&url=#{projects_path}" %>

SUBURI 应该添加到每个传递变量的 url。该解决方案到目前为止有效。

于 2012-05-07T20:46:08.850 回答