Rails redirect_to无法在生产中工作

时间:2017-02-25 15:43:09

标签: ruby-on-rails

我检查了其他类似的问题,没有一个问题相同。用户登录后,我的应用程序会重定向到根路径。应该很简单,但由于某种原因,redirect_to没有返回正确的url。它在开发模式下工作正常。 我正在尝试学习如何设置生产模式。所以我有一个小应用程序只有登录/注销,grah.ddns.net当我执行redirect_to到root_url时,我在浏览器的地址栏中得到以下内容:

  

" http://grah.ddns.net,grah.ddns.net"

我不知道为什么redirect_to会返回这样的字符串。

这是我的控制器代码:

def login
  user = User.find_by_name(params[:name])
  if user.present?
    @user = user.authenticate(params[:password])
    if @user.present?
      session[:userID] = @user.id
      session[:userName] = params[:name]
    end
  end
  // responds with "http://grah.ddns.net, grah.ddns.net
  redirect_to root_url  

end

def logout
  session.delete(:userID) if session[:userID].present?
  session.delete(:userName) if session[:userName].present?
  // Which should I use root_path or root_url?
  redirect_to root_path
end

这是我的路线档案:

Rails.application.routes.draw do
  root 'main#index'

  get 'main/index'

  post 'session/login'
  get 'session/logout'

end

我在这里看不到什么应该导致我得到的东西。我发现与此远程连接的唯一事情是:

config.consider_all_requests_local = false

在开发模式中也是如此,它有效。做生产模式的哪一部分我错过了???一半试图在开发模式下运行......谢谢。

3 个答案:

答案 0 :(得分:0)

使用redirect_to root_path代替root_url。它会将您重定向到 root'main #index'

_URL更适合向外部来源显示网址。在您的应用程序中,_PATH工作正常,因为它已链接到您当前的URL。无需重复..

路径将返回'/',其中url将返回完整的url。

答案 1 :(得分:0)

尝试添加

root "main#index"

在route.rb文件的末尾。

答案 2 :(得分:0)

似乎与

config.consider_all_requests_local = false

所有redirect_to语句都必须是完全限定的域名。使用FQDN解决了我的问题。