2012-03-05 115 views
0

您好我一直在嘗試部署我的Rails應用程序的Heroku在過去的幾天紅寶石,我得到這個錯誤「很抱歉,但出事了。我們已經通知過這個問題我們很快就會看到它「。即使我跟隨Heroku的導遊,我檢查Heroku的日誌,這是它說:麻煩部署到Heroku的

2012-03-05T18:59:41+00:00 app[web.1]: Processing by StoreController#index as HTML 
2012-03-05T18:59:41+00:00 app[web.1]: Rendered store/index.html.erb within layouts/application (66.7ms) 
2012-03-05T18:59:41+00:00 app[web.1]: Completed 500 Internal Server Error in 164ms 
2012-03-05T18:59:41+00:00 app[web.1]: 
2012-03-05T18:59:41+00:00 app[web.1]: ActionView::Template::Error (PG::Error: ERROR: column "name" does not exist 
2012-03-05T18:59:41+00:00 app[web.1]: LINE 1: SELECT "products".* FROM "products" ORDER BY Name 
2012-03-05T18:59:41+00:00 app[web.1]:              ^
2012-03-05T18:59:41+00:00 app[web.1]: : SELECT "products".* FROM "products" ORDER BY Name): 
2012-03-05T18:59:41+00:00 app[web.1]:  2: <p id= "notice"><%= notice %></p> 
2012-03-05T18:59:41+00:00 app[web.1]:  3: <% end %> 
2012-03-05T18:59:41+00:00 app[web.1]:  8:   
2012-03-05T18:59:41+00:00 app[web.1]:  6: <div class ="entry"> 
2012-03-05T18:59:41+00:00 app[web.1]: app/views/store/index.html.erb:5:in `_app_views_store_index_html_erb___635623125359494649_35532040' 
2012-03-05T18:59:41+00:00 app[web.1]:  7:  <div class="img"> 
2012-03-05T18:59:41+00:00 app[web.1]:  5: <% @products.each do |product| %> 
2012-03-05T18:59:41+00:00 app[web.1]: 
2012-03-05T18:59:41+00:00 app[web.1]:  4: 
2012-03-05T18:59:41+00:00 app[web.1]: 
2012-03-05T18:59:41+00:00 app[web.1]: cache: [GET /] miss 

可能是什麼問題,因爲它工作本地罰款?難道這是事實我使用SQLite3作爲我的數據庫進行測試和開發,但對於Heroku它使用PostgreSQL?

+0

當你說這本地工作,你的意思是你在本地測試的生產環境,或者是你談論你的開發環境? – PhillipKregg 2012-03-05 21:33:36

回答

2

讓我們在您的錯誤仔細一看:

ActionView::Template::Error (PG::Error: ERROR: column "name" does not exist 
LINE 1: SELECT "products".* FROM "products" ORDER BY Name 
                ^

上的情況下,但不帶引號的Name十分可疑; SQL標識符不區分大小寫,除非您引用它們(它們應該標準化爲大寫,但PostgreSQL標準化爲小寫)。因此,這些表都是一樣的:

create table t (name varchar(255)); 
create table t (Name varchar(255)); 
create table t (nAmE varchar(255)); 
create table t (NAME varchar(255)); 

但這些都是不同的:

create table t ("name" varchar(255)); 
create table t ("Name" varchar(255)); 
create table t ("nAmE" varchar(255)); 
create table t ("NAME" varchar(255)); 

我猜想,您已經創建的表有"Name"列,而不是name列。我建議用小寫name列重新創建表;或者,當你調用order你可以引述列:

Model.where(...).order('"Name"') 

但實際上,使用小寫列名將使您的生活更輕鬆,維持你的代碼的人都會有小別勝新婚的你的記憶。

您的評論注意到其他地方你正在開發的SQLite的,但部署到PostgreSQL。 SQLite似乎忽略列名中的情況,即使它們被引用時:

sqlite> create table t ("Name" text); 
sqlite> insert into t values ('a'); 
sqlite> select * from t order by name; 
Name 
a 

因此,一切都會在SQLite中正常工作。 PostgreSQL的,然而,注重帶引號的標識符的情況下(如SQL規範說,它應該),所以ORDER BY Name會如果列被引述了它的創建(即類似create table t ("Name" varchar...)時失敗。

有SQLite的和PostgreSQL之間的其他區別。 ActiveRecord無法保護您免受數據庫之間的所有差異,因此您應始終使用相同的堆棧(一直到數據庫版本)進行開發,測試和部署。

-1

看起來您可能需要遷移。

heroku run rake db:migrate 
+0

我仍然獲得運行後,同樣的錯誤命令 – 2012-03-05 19:27:31

-1
  • 是你git status乾淨嗎?
  • 如果是這樣,最近有沒有git push heroku master

確保您的代碼提交併推。然後你會想運行遷移。

+0

正如你所說的git狀態#分支主 沒有犯我這樣做(工作目錄乾淨) 混帳推的Heroku樣樣精通了最新 的Heroku運行耙db:migrate 運行rake db:migrate attach to terminal ... up,run.1我仍然得到相同的錯誤 – 2012-03-05 19:43:54

+0

那麼你在運行遷移時遇到錯誤?另外,你可以在你的db/schema.rb中確認產品表是否有名稱列? – 2012-03-05 20:23:04

+0

是的,它確實有一個名稱列,不,編譯時我沒有遇到錯誤。難道這是事實我使用sqlite3作爲我的數據庫的測試和開發,但對於Heroku它使用postgresql。如果是這種情況,最好在本地遷移到postgresql然後再次嘗試推送。 – 2012-03-05 21:14:21