在生产中,我们的rails 3.1.4 app被部署到suburi server_ip /。 suburi / by的部署需要在调用link_to时在自定义方法'view_handler'前面添加/ by(用于记录查看历史记录)。以下是铁轨生产中的一个示例:
<%= 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部署?或者我们如何才能将链接中的suburi附加到link_to?非常感谢
答案 0 :(得分:3)
尝试:
scope(Rails.env=='production' ? '/by' : '') do
resources :foos
....
end
答案 1 :(得分: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
答案 2 :(得分: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中。解决方案到目前为止一直有效。