2012-05-25 30 views
1

我的應用程序實現用戶可以投票和'unvote'的'想法'。它在當地很好地工作。當推送到Heroku時,用戶可以投票,但「unvote」操作不起作用,並生成「我們很抱歉,但出錯了。」來自herokuapp.com的頁面。RoR投票系統在本地工作,但不在Heroku上部署時

我檢查Heroku的日誌和錯誤如下:

2012-05-25T09:47:18+00:00 app[web.1]: Started POST "/ideas/remove_vote/1/1" for 88.171.195.199 at 2012-05-25 09:47:18 +0000 
2012-05-25T09:47:18+00:00 app[web.1]: Processing by IdeasController#remove_vote as HTML 
2012-05-25T09:47:18+00:00 app[web.1]: Parameters: {"authenticity_token"=>"mJ5daJfBhf+823VTg9C1+YSBdqVFTFPuJWiO2cIx6iQ=", "u_id"=>"1", "i_id"=>"1"} 
2012-05-25T09:47:18+00:00 app[web.1]: Completed 500 Internal Server Error in 8ms 
2012-05-25T09:47:18+00:00 app[web.1]: : DELETE FROM "votes" WHERE "votes"."" = $1): 
2012-05-25T09:47:18+00:00 app[web.1]: app/controllers/ideas_controller.rb:85:in `remove_vote' 
2012-05-25T09:47:18+00:00 app[web.1]: 
2012-05-25T09:47:18+00:00 app[web.1]: ActiveRecord::StatementInvalid (PG::Error: ERROR: zero-length delimited identifier at or near """" 
2012-05-25T09:47:18+00:00 app[web.1]:           ^
2012-05-25T09:47:18+00:00 app[web.1]: LINE 1: DELETE FROM "votes" WHERE "votes"."" = $1 
2012-05-25T09:47:18+00:00 app[web.1]: 
2012-05-25T09:47:18+00:00 app[web.1]: cache: [POST /ideas/remove_vote/1/1] invalidate, pass 
2012-05-25T09:47:18+00:00 app[web.1]: 

remove_vote在ideas_controller.rb方法如下:

def remove_vote 
    @vote = Vote.find_by_user_id_and_idea_id(params[:u_id], params[:i_id]) 
    @vote.destroy 
    redirect_to ideas_path 
end 

是否有任何的你有想法解決這個問題?我懷疑它與本地數據庫是SQLite和Heroku上的生產數據庫是PostgreSQL有關,但我覺得很奇怪添加投票是有效的,而刪除投票不會。

回答

2

看一看delete語句在日誌中發出:DELETE FROM "votes" WHERE "votes"."" = $1

什麼列是where子句在說什麼?它應該討論什麼專欄? Vote模型中有沒有解釋它不使用id列的內容?

+0

那時確實: ':票:CREATE_TABLE ID =>假辦| T |' 創建票包括遷移這阻止了至少在PG生產數據庫中創建'id'列。非常感謝幫助我在那裏看@Iain。我刪除了',:id => false',現在它工作得很好。顯而易見,它可以在SQLite數據庫本地工作,而不是PostgreSQL數據庫?這是否意味着上面提到的遷移不會在SQLite中創建'id',而是在PostreSQL數據庫中創建'id'? (@Iain:感謝編輯我的問題,我學到了很多......) – littlewikiz

+0

這不是說你的遷移本身在SQLite中創建了一個id, SQLite只是爲每個表添加一個RowID,我猜這個rails的SQLite適配器足夠聰明,可以使用。至於顯而易見的事情,在不同的數據庫上工作不同的東西在它們給你帶來問題之前並不明顯,事後很明顯。 – Iain

+0

(以及它的價值,感謝編輯是由於[馬特](http://stackoverflow.com/users/214790/matt),而不是我) – Iain

1

當你遇到像這樣的問題時,最好使用postgres在本地配置/運行你的應用程序。這將允許您在本地調試這些問題,而不是試圖「猜測」Heroku上的問題。

這是一個很好的讓本地運行postgres的railscast。

http://railscasts.com/episodes/342-migrating-to-postgresql

+2

感謝您的建議,@Lumbee。看起來是個好主意,因爲即使我最終設法解決了這個問題(請參閱我對@Iain的評論),這種猜測確實需要一段時間...... – littlewikiz

相關問題