Authlogic не работает с моим приложением Rails 3.2 - PullRequest
7 голосов
/ 01 марта 2012

Я использую Rails 3.2 и последнюю версию Authlogic.Когда я запускаю свое приложение локально на моем Mac, оно работает нормально.Когда я пытаюсь запустить его на своем рабочем сервере (Ubuntu с Passenger / Apache), я получаю следующее:

You must establish a database connection before using acts_as_authentic

Я не уверен, как устранить проблему.Я отправил этот связанный вопрос ранее сегодня, прежде чем понял, что проблема была шире, чем я думал.

Ответы [ 4 ]

9 голосов
/ 04 марта 2012

Я разобрался в проблеме. Посмотрите на этот фрагмент из Authlogic lib/authlogic/acts_as_authentic/base.rb:

    private
      def db_setup?
        begin
          column_names
          true
        rescue Exception
          false
        end
      end

Если column_names выдает ошибку, db_setup? вернет false. Посмотрите на эту другую функцию, также из base.rb:

    def acts_as_authentic(unsupported_options = nil, &block)
      # Stop all configuration if the DB is not set up
      raise StandardError.new("You must establish a database connection before using acts_as_authentic") if !db_setup?

      raise ArgumentError.new("You are using the old v1.X.X configuration method for Authlogic. Instead of " +
        "passing a hash of configuration options to acts_as_authentic, pass a block: acts_as_authentic { |c| c.my_option = my_value }") if !unsupported_options.nil?

      yield self if block_given?
      acts_as_authentic_modules.each { |mod| include mod }
    end

Если db_setup? возвращает false, Authlogic сгенерирует исключение , но не то же исключение, выданное column_names.

Моя проблема заключалась в том, что column_names выдавал это исключение:

/Users/jason/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.2.1/lib/active_record/connection_adapters/postgresql_adapter.rb:1106:in `async_exec': PG::Error: ERROR:  relation "users" does not exist (ActiveRecord::StatementInvalid)
LINE 4:              WHERE a.attrelid = '"users"'::regclass
                                        ^
:             SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull
              FROM pg_attribute a LEFT JOIN pg_attrdef d
                ON a.attrelid = d.adrelid AND a.attnum = d.adnum
             WHERE a.attrelid = '"users"'::regclass
               AND a.attnum > 0 AND NOT a.attisdropped
             ORDER BY a.attnum

И причина этого исключения заключается в том, что моя пользовательская таблица называется user, а не users, но Rails неправильно определил мои настройки pluralize_table_names. Как только я исправил свою проблему pluralize_table_names (очевидно, способ работы этого параметра был изменен в Rails 3.1), моя проблема с Authlogic исчезла.

Так что, если у вас возникла эта проблема, вы можете попробовать это:

  • Клонируйте репозиторий Authlogic где-нибудь на вашем компьютере разработчика
  • Измените свой Gemfile, чтобы использовать локальную версию Authlogic ('authlogic', :path => '/path/to/authlogic')
  • Добавить column_names вызов db_setup? за пределами пункта begin / rescue / end
  • Проверьте, нет ли у вас другой, потенциально более точной и информативной ошибки, как я сделал
5 голосов
/ 12 июля 2012

Я исправил это на своей вилке.Пока Бен не успеет объединить исправление, вы можете обойти это, используя фиксированную ветку в вашем Gemfile;

gem 'authlogic', :git => 'git@github.com:james2m/authlogic.git', :branch => 'fix-migrations'
4 голосов
/ 24 августа 2012

Для всех, кто мог зайти на эту страницу в поисках ответа.

Одной из причин может быть то, что вы не создали тестовую базу данных.

Просто запустите:

$ RAILS_ENV = тестовый рейк db: создать db: migrate

1 голос
/ 10 сентября 2012

Следуйте за открытым выпуском в https://github.com/binarylogic/authlogic/issues/318 и +1, так что исправление скоро будет объединено:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...