Rails 4.2.5:乘客与webrick

时间:2016-01-28 08:53:19

标签: ruby-on-rails devise passenger

以下是我的带有before_action的控制器

class Admin::ApplicationController < ApplicationController
  before_action :authenticate_admin!

  #
  # ....
  #
end

class Admin::DashboardController < Admin::ApplicationController
  def show
  end
end

routes.rb中:

  namespace :admin do
    root :to => "dashboard#show"  # to match the route /admin
  end

我正在使用设计进行身份验证。与乘客5.0.23一起使用时的问题是当我第一次从浏览器访问/管理员而没有登录时,我被重定向到/ admins / sign_in这是完美的。如果我再次尝试访问/ admin,则无需登录,它会将我带到仪表板。所以before_action被忽略了。现在,如果我修改上述控制器中的任何一个或重新启动乘客,则before_action将再次用于对/ admin的立即请求,但不会用于后续请求。

我试过乘客5.0.15,它与另一个rails 4.1.5的应用程序一起正常工作,但它没有解决问题。我无法尝试将rails降级到4.1.5,因为它引发了很多其他错误。

当我使用webrick运行相同的上述应用程序时,before_action每次都能正常工作。

是否有人面临上述问题?知道上述问题可能是什么原因以及解决问题的任何建议?提前谢谢。

修改 当与webrick一起使用时,这个问题似乎也存在。我有2种类型的身份验证。一个用于用户,另一个用于管理员。随着webrick,问题在两个身份验证之间切换。如果before_action适用于authenticate_user !,它对authenticate_admin不起作用!反之亦然。与乘客一样,它既不适用也不适用。这似乎只发生在开发模式中。

1 个答案:

答案 0 :(得分:0)

我想我找到了解决这个问题的方法。我将Admin :: ApplicationController重命名为Admin :: BaseController并在所有管理控制器中继承它。 before_filters现在按预期工作,但仍然不确定为什么使用Admin :: ApplicationController是错误的。是类名&#39; ApplicationController&#39;混淆了红宝石翻译?因为继承层次结构是:

from pandas import Series

x = Series([2.3,6.7,1.2,8.0,7.5])
print x

shift = x.shift(periods=-1)
print shift
0    6.7
1    1.2
2    8.0
3    7.5
4    NaN
dtype: float64

y = x[1:]
print y
1    6.7
2    1.2
3    8.0
4    7.5
dtype: float64

print y.corr(shift)
-0.397282761402

因此对于Admin :: DashboardController,似乎只有一个ApplicationController并忽略Admin :: ApplicationController。可能是!