如何忽略rails中的路由?

时间:2014-01-19 20:03:18

标签: ruby-on-rails ruby routing ruby-on-rails-4

我有一条路线,即我想忽略的mysite.com:3000/new_route,这可以通过rails而不是服务器端进行吗?

我已经读过这可以通过apache完成,但是,我的应用程序在Heroku上运行,我无法访问该类型的控件。因此,我正在寻找通过Rails实现此目的的另一种方式。

由于

更新

我正在使用faye在我的应用中提供实时通知,localhost fayeport 9292 - localhost:9292/faye上运行,所有这些都处于开发模式,但在生产中它应该指向mydomain.com/faye,生产环境中没有端口号,加载faye.js会返回error not found

3 个答案:

答案 0 :(得分:2)

如果您正在谈论您不想创建的资源路线:

resources :something, except: :new

但是,我不确定这是否是你的意思。

答案 1 :(得分:0)

您可以在routes.rb文件的顶部定义一条路线,该路线将重定向到其他某个页面。

get '/new_route', redirect: '/'

答案 2 :(得分:0)

当你要求Rails处理这条路线时,已经太晚了。如果你要求rails处理一条路线,它将通过返回400的400错误或一个页面。

如果您希望路由由其他应用程序处理,则需要由您的网络服务器(nginxapache或您正在使用的任何人拦截)。在他们的配置中,您只需将该路由重定向到另一个应用程序,以及到Rails应用程序的每个其他路由。

修改

您拥有的另一个选择是将请求转发到其他服务器。

添加类似

的路线
get 'faye/*query' => 'faye#get'
post 'faye/*params' => 'faye#post'

然后是控制器

require 'faraday'

class FayeController < ApplicationController

  APP = 'http://mydomain.com:9292'

  def get
    request_page :get
  end

  def post
    request_page :post
  end

  private 

  def request_page(method)
    conn = Faraday.new(:url => APP)
    query = params.delete(:query)
    response = conn.send method, query, params
    render text: response.body.gsub(APP, 'mydomain.com/faye')
  end
end

将使用法拉第加载来自其他应用程序的信息。