我在linux上使用jruby开发了一个padrino应用程序,工作正常。但是当我使用warbler将它部署到Windows 7上的Tomcat时,访问页面时出现以下错误:
undefined local variable or method `authenticate' for #<MyApp:0x480ebb>
file: app.rb
C:/Program Files (x86)/Apache Software Foundation/Tomcat 8.0/webapps/theapp/WEB-INF/app/app.rb in MyApp
authenticate
C:/Program Files (x86)/Apache Software Foundation/Tomcat 8.0/webapps/theapp/WEB-INF/gems/gems/padrino-core-0.12.2/lib/padrino-core/application/routing.rb in filter!
base.filters[type].each { |block| instance_eval(&block) }
以下是app / app.rb中的违规行:
class MyApp < Padrino::Application
# lots of standard code
register Padrino::Helpers
before do
authenticate
end
end
这是帮助文件:app / helpers / auth_helper.rb。 (最初帮助器是用MyApp.helpers do
声明的,我尝试将其更改为模块,但没有运气)。
class MyApp
module AuthHelper
def logged_in?
session[:user].present?
end
def authenticate
if !logged_in?
# Allow login page to be seen
allowed_urls = ['/','/login', '/account/activate', '/account/register']
return if allowed_urls.include? request.path_info
end
if logged_in?
@user = session[:user]
else
redirect to('/login')
end
end
def logout
@user = nil
session.clear if logged_in?
redirect to('/login')
end
end
helpers AuthHelper
end
更新:我从来没有弄清楚为什么我不能让tomcat使用我的应用程序,而且它没有被padrino社区的人复制。我搬到码头解决了这个问题。
答案 0 :(得分:1)
我建议您在控制器或相关模型文件中定义authenticate
提供了一个Helper
方法来渲染html,如果你想使用一个帮助方法,你应该先include HelperModule
。
答案 1 :(得分:0)
我通过在auth_helper.rb文件中的帮助程序代码之后调用authenticate
来解决此错误:
class MyApp < Padrino::Application
# Pre / Post Filters
before do
authenticate
@breadcrumbs = [{label: 'Home', href: '/'}]
end
end
现在我只在tomcat中得到404,所以我不确定这是否真的有用。