Padrino应用程序在部署到tomcat windows 7时不加载自定义帮助程序

时间:2014-09-05 06:48:52

标签: tomcat jruby padrino warbler

我在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社区的人复制。我搬到码头解决了这个问题。

2 个答案:

答案 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,所以我不确定这是否真的有用。