2011-11-03 88 views
1

我想在Ubuntu上与Postgres9.1使用Rails 2.3.5应用程序(部署在Apache2与Phusion乘客)。当我试图访问它,抱怨表中不存在该应用程序将引发此错误:rails SQL查询报告与postgres失败,但成功从psql命令行工具

PGError: ERROR: relation "users" does not exist 
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 

但是如果我剪切和粘贴在PSQL(CMDLINE客户端)相同的查询,它工作得很好。 用户表也存在。我尝试了一次rake db:reset和'rake db:migrate',但似乎没有帮助。
我还验证了ActiveRecord :: Base.connection从rails-app中的脚本/控制台成功,这意味着与数据库的连接使用database.yml中配置的凭据。

我迷路了..任何线索,以补救这一点将大大赞赏。

+2

我敢打赌,你是从Rails内部连接到不同的数据库 –

+0

非常感谢你的回应,Edwin和“a_horse ..”。 T'was连接到错误的数据库。我配置了开发模式的应用程序(通过environment.rb)。但是我的设置正在被Phusion Passenger(我使用的是apache)覆盖。它默认将RailsEnv设置为“生产”。由于我之前使用'rake db:create:all',prod DB确实已经创建,但我的'rake db:migrate'只填充了开发数据库。我必须更改apache站点配置以设置RailsEnv开发,如下所示:http://www.modrails.com/documentation/Users%20guide%20Apache.html#rails_env。 – Don

+0

@唐:a_horse_with_no_name有他的右马的钱。很酷,它的作品。不过,我真的很想知道这个神秘的埃德温家伙。 ;) –

回答

1

三种可能的原因。

1)special cast ::regclasssearch_path的当前设置考虑在内。 也许您的表格users在从应用程序查询时不在search_path中。可以为每个用户或会话设置search_path
解决方案将架构限定表名是这样的:

'myschema.users'::regclass 

2)资本化。为什么'"users"'::regclass而不是'users'::regclass?这是多余的。是“用户”表的实际名称或什么,你在psql中使用大写? (如果你实际上删了&粘贴查询,这不可能。)

3)连接到错误的数据库。错误的端口? (请参阅@a_horse评论。)

+0

非常感谢您的回复,Edwin和“a_horse ..”。 T'was连接到错误的数据库。我配置了开发模式的应用程序(通过environment.rb)。但是我的设置正在被Phusion Passenger(我使用的是apache)覆盖。它默认将RailsEnv设置为“生产”。由于我之前使用'rake db:create:all',prod DB确实已经创建,但我的'rake db:migrate'只填充了开发数据库。我必须更改apache站点配置以设置RailsEnv开发,如下所示:http://www.modrails.com/documentation/Users%20guide%20Apache.html#rails_env。 – Don

相关问题