【发布时间】: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中,您使用此 URLruby.morgotha.net配置了项目根目录。因此,它用作根路径。而且,如果你重定向,那么不应该有任何return声明。 -
当我发布这个问题时,我确实考虑了重定向后的返回语句。我把它拿出来,又试了一次。它错误地说我有多个渲染。但也许你的权利。我会看看我是否可以重写控制器,这样就不需要返回了。
标签: ruby-on-rails ruby