0

爲什麼我會在我的Heroku應用程序上獲得NoMethodError,當相同的代碼在我的本地設置上完美地工作?Heroku上的Rails關聯失敗,但在本地框上工作?

錯誤是由該代碼觸發:

@customer = Customer.find(1) 
@customer.responses.create(:offer_id => '1', :digit => '2') 

該代碼工作按計劃我的本地服務器上,並在我的本地Rails的控制檯。

然而,在Heroku上述代碼觸發NoMethodError:

NoMethodError (undefined method `responses' for #<Customer:0x7f7bcbee3808>): 

響應模型由belongs_to的方式綁在客戶模型:客戶

另外,I可以登錄到Heroku控制檯並運行該程序,沒有任何問題:

Response.create(:offer_id => '1', :customer_id => '1', :digit => '2') 

因此,如果上述工作和兩個版本都在我的本地框上正常工作,爲什麼會在Heroku上失敗?

-

的運轉軌道3.0.6並在Heroku的Ruby 1.8.7和Ruby 1.9.2

數據庫測試是相同的在Heroku和我的本地框。

+0

是':belongs_to:customer'類型。應該是'belongs_to:customer' – s84 2011-04-07 01:05:55

+0

如果你使用R3,你應該使用Ruby> 1.9.1 – s84 2011-04-07 01:06:39

+0

@Sam爲什麼對於1.9.1的建議? RoR 3在1.8.7上有什麼特別的問題? – Zabba 2011-04-07 01:11:22

回答

2

通常當這樣的事情不工作表示你缺少一個has_many關聯。如果您想訪問它們,您需要定義belongs_tohas_many兩側的關聯。

通過它的聲音,如果它在你的本地機器上工作,但不是Heroku,那麼這將是因爲你沒有將更改推送到Heroku服務器並在那裏重新啓動控制檯。請確保您已推送更改並再次嘗試。

+0

我不願意承認它,但事實證明,這只是。我積極向上推送所有代碼,但事實證明,這是我本地機器上的主服務器和服務器上的主服務器之間的提交差異。 Heroku的版本錯過了這個關聯。愚蠢的錯誤,但一個很好的教訓,以檢查基本知識之前的一切。 – Marco 2011-04-07 21:21:53

+0

它讓我想起了大學編程課程中的一句古老諺語:如果您確定所有的代碼都是正確的,但它仍然無法正常工作,那麼您確定的一件事是正確的是錯誤的。 :-) – 2011-04-08 04:23:34

0

我覺得你的問題是你如何創建響應:

@customer.responses.create(:offer_id => '1', :digit => '2') 

你可能想,而不是嘗試。

Response.create(:offer_id => '1', :digit => '2', :customer_id => 1) 
+0

第一個版本應該可以正常工作。事實上,它確實不在Heroku上。我的代碼與此處發佈的代碼幾乎完全相同:http://guides.rubyonrails.org/association_basics.html – Marco 2011-04-07 01:52:36

+0

另外,我在我的應用程序的其他部分爲不同模型提供了非常類似的代碼,它在Heroku上完美地工作,並且在我的本地服務器上。 – Marco 2011-04-07 01:54:30

1

Marco,我想了一下這個,我有幾個猜測讓你去嘗試。在執行其中之一之前,請重新啓動您的應用程序。有時候這會創造奇蹟。

heroku restart 

好了,現在,嘗試在控制檯只是

@customer.responses 

那有什麼回報呢?我認爲它應該是[]。也許做一些檢查等可以給我們在這裏的見解。如果您手動構建和關聯響應,您是否可以讓它顯示出來?

其次,你沒有方法錯誤是responses,而不是create,所以無論你輸入後可能並不重要,但,是你offer_iddigit領域的整數?如果是這樣,請嘗試使用整數而不是字符串來創建它們。與MySQL或SQLite相比,PostgreSQL非常脆弱,在Heroku上開發之前,我有很多問題可以追溯到我對Postgre的不熟悉。

@customer.responses.create(:offer_id=>1,:digit=>3) 

這可能沒關係,但它值得檢查。

要檢查的另一件事是你所有的回調和驗證等。是否有什麼失敗?這似乎沒有什麼關係,但是我之前遇到過問題,因爲我忽略了一個回調中看似微小的沉默失敗。我相信你在測試,但是如果你在這個模型的任何地方都有淺度測試,那麼你可以使用這個bug追蹤來加強它:)

對錯誤的同情,我不知道這是否有幫助,但祝你好運!如果Heroku員工發現問題,請發帖,我很樂意從中學習!

相關問題