我正在运行Rails 3.2和最新版本的Authlogic。当我在Mac上本地运行我的应用程序时,它工作正常。当我尝试在我的生产服务器(带有Passenger / Apache的Ubuntu)上运行它时,我得到了这个:
You must establish a database connection before using acts_as_authentic
我不确定如何解决问题。我在今天早些时候发布this related question之后才意识到这个问题比我想象的要广泛。
答案 0 :(得分:9)
我弄明白了这个问题。请查看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', :path => '/path/to/authlogic'
)column_names
/ db_setup?
/ begin
条款rescue
添加end
来电
答案 1 :(得分:5)
我已经修好了我的叉子。在Ben有时间合并修复程序之前,您可以使用Gemfile中的fixed分支解决此问题;
gem 'authlogic', :git => 'git@github.com:james2m/authlogic.git', :branch => 'fix-migrations'
答案 2 :(得分:4)
对于其他可能来到此页面寻找答案的人。
一个原因可能是您尚未创建测试数据库。
跑步:
$ RAILS_ENV = test rake db:create db:migrate
答案 3 :(得分:1)
按照https://github.com/binarylogic/authlogic/issues/318上的未解决问题+1,以便修补程序尽快合并:)