我有一条路线,即我想忽略的mysite.com:3000/new_route,这可以通过rails而不是服务器端进行吗?
我已经读过这可以通过apache完成,但是,我的应用程序在Heroku上运行,我无法访问该类型的控件。因此,我正在寻找通过Rails实现此目的的另一种方式。
由于
更新
我正在使用faye在我的应用中提供实时通知,localhost
faye
在port 9292
- localhost:9292/faye
上运行,所有这些都处于开发模式,但在生产中它应该指向mydomain.com/faye
,生产环境中没有端口号,加载faye.js
会返回error not found
答案 0 :(得分:2)
如果您正在谈论您不想创建的资源路线:
resources :something, except: :new
但是,我不确定这是否是你的意思。
答案 1 :(得分:0)
您可以在routes.rb
文件的顶部定义一条路线,该路线将重定向到其他某个页面。
get '/new_route', redirect: '/'
答案 2 :(得分:0)
当你要求Rails处理这条路线时,已经太晚了。如果你要求rails处理一条路线,它将通过返回400的400错误或一个页面。
如果您希望路由由其他应用程序处理,则需要由您的网络服务器(nginx
或apache
或您正在使用的任何人拦截)。在他们的配置中,您只需将该路由重定向到另一个应用程序,以及到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
将使用法拉第加载来自其他应用程序的信息。