2011-11-03 89 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

相關問題