Приложение Padrino не загружает настраиваемых помощников при развертывании в tomcat windows 7

У меня есть приложение padrino, разработанное с использованием jruby для Linux, которое отлично работает. Однако, когда я развертываю его на Tomcat в Windows 7 с помощью warbler, я получаю следующую ошибку при доступе к странице:

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. Я перешел на пристань, которая решила проблему.


person kristianp    schedule 05.09.2014    source источник


Ответы (2)


Я предлагаю вам определить authenticate в файле контроллера или связанной модели.
Метод Helper предоставляется для рендеринга HTML, и если вы хотите использовать вспомогательный метод, вы должны сначала include HelperModule.

person dddd1919    schedule 05.09.2014
comment
include HelperModule просто выдает неинициализированную постоянную ошибку. У меня есть register Padrino::Helpers в app.rb. - person kristianp; 08.09.2014

Я избавился от этой ошибки, поместив вызов authenticate после вспомогательного кода в файл auth_helper.rb:

class MyApp < Padrino::Application

  # Pre / Post Filters
  before do
    authenticate 
    @breadcrumbs = [{label: 'Home', href: '/'}]
  end
end

Теперь я не получаю ничего, кроме 404 в tomcat, поэтому я не уверен, что это действительно сработало.

person kristianp    schedule 08.09.2014