【问题标题】:Ruby on Rails 5: redirect_to giving url and pathRuby on Rails 5:redirect_to 提供 url 和路径
【发布时间】:2016-12-11 06:33:32
【问题描述】:

我正在构建一个 Rails 5 网络应用程序。在我的 localhost 开发环境中,一切都运行良好。我有一个 Digital Ocean dropplet(运行 Ubuntu 14.04、nginx/puma 和 mySql)。按照正常顺序,一个人登录后,我重定向到root_path。再次在我的 localhost 环境中,这按预期工作,但在远程主机上(仍在开发环境中)redirect_to 函数同时提供了 url 和路径。

这是我的登录控制器代码:

class SessionController < ApplicationController
  def login
    user = User.find_by_uname params[:uname]
    if user.present?
      @user = user.authenticate(params[:password])
      if @user.present?
        puts "@user present"
        session[:userid] = @user.id
        session[:uname] = @user.uname
        @modal = 'login'
        redirect_to root_path
      else
        puts "@user did not authenticate -- wrong password"
      end
    else
      puts "#{params[:uname]} not in database."
      render partial: 'utility/loginfailure', as: :js
    end
  end
end

在 log/development.log 文件中我看到了这个:

重定向到http://ruby.morgotha.net,ruby.morgotha.net/

由此看来,它似乎来自重定向方法,但它在 localhost dev 上运行良好。

我不知道如何解决这个问题了。因此,如果有人愿意指导我更深入地研究这一点,我肯定会很感激。

编辑我将会话控制器更改为不需要 return 语句。问题仍在发生。 root_path 解析为“/”。

【问题讨论】:

  • 我猜在您的apache/nginx 中,您使用此 URL ruby.morgotha.net 配置了项目根目录。因此,它用作根路径。而且,如果你重定向,那么不应该有任何return 声明。
  • 当我发布这个问题时,我确实考虑了重定向后的返回语句。我把它拿出来,又试了一次。它错误地说我有多个渲染。但也许你的权利。我会看看我是否可以重写控制器,这样就不需要返回了。

标签: ruby-on-rails ruby


【解决方案1】:

答案最终是错误配置的 Nginx 配置。 这就是我的根位置所拥有的

  location / {
    proxy_headers_hash_max_size 768;
    proxy_headers_hash_bucket_size 128;
    include proxy_params;
    proxy_redirect off;  <---- this line is the problem
    proxy_pass http://grah;
  }

和'proxy_redirect off;'的行是问题所在。删除该行,redirect_to 现在按预期工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    相关资源
    最近更新 更多