如何基于rails 3.1环境设置路由变量?

时间:2012-05-07 16:13:40

标签: ruby-on-rails deployment ruby-on-rails-3.1

在生产中,我们的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?非常感谢

3 个答案:

答案 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中。解决方案到目前为止一直有效。