2012-02-06 21 views
0

我有2種型號:插入到在Heroku數據庫錯誤,但本地工作,ActiveRecord的:: StatementInvalid

class User < ActiveRecord::Base 
    has_many :micro_posts, :dependent => :destroy 
    .. 
    def add_post(post) 
    self.micro_posts << post 
    end 

class MicroPost < ActiveRecord::Base 
    belongs_to :user 
    ... 

和遷移:

class CreateMicroPosts < <ActiveRecord::Migration 
    def change 
    create_table :micro_posts do |t| 
    ... 

當我打電話的Heroku服務器上add_post,我出現錯誤:

2012-02-06T02:59:58+00:00 app[web.1]: ActiveRecord::StatementInvalid (ArgumentError: wrong number of arguments (1 for 0): INSERT INTO "micro_posts" ("created_at", "description", "pub_date", "tag", "title", "updated_at", "url", "user_id") VALUES ($1, $2, $3, $4, $5, $6, $7, $8) RETURNING "id"): 
2012-02-06T02:59:58+00:00 app[web.1]: app/models/user.rb:25:in `add_post' 

但有線的東西是,它在我的電腦上工作。我的操作系統信息:

ubuntu 10.04 
ruby 1.9.3p0 
rails 3.1.3 
postgresql 8.4.10 

謝謝。

+0

我不能看到第一眼什麼你的代碼錯誤。不過我注意到你正在運行PostgreSQL 8.4,因爲Heroku在9.0.4(甚至9.1)的地方運行。嘗試升級您的Postgres並查看是否可以在本地重現錯誤。這會給你更詳細的記錄。 – Ariejan 2012-02-06 15:38:07

+0

謝謝。我會升級它並嘗試。 – 2012-02-07 01:05:50

+0

NO。我將postgresql升級到9.1.2(從源代碼構建),它在本地工作。 – 2012-02-07 02:50:35

回答

1

我解決了這個問題,但還是不知道爲什麼。

經過一些嘗試在heroku控制檯(heroku運行控制檯)後,我發現錯誤不是由我的add_post方法引起的。

post = MicroPost.new(..., :pub_date => rss_item.pubDate) 

由於代碼顯示在這裏,有微柱日期時間列其名PUB_DATE,而這個領域來自RSS項目pubdate的,而這個代碼將導致錯誤:其實這是我MicroPost.new引起下面示出了(在Heroku):

irb(main):020:0> post=MicroPost.new(:description=>"none", :url=>'url',:title=>"title",:pub_date=>item.pubDate,:tag=>"tag") 
ArgumentError: wrong number of arguments (1 for 0) 
from /usr/local/lib/ruby/1.9.1/time.rb:454:in `rfc2822' 
from /app/vendor/bundle/ruby/1.9.1/gems/activesupport-3.1.3/lib/active_support/time_with_zone.rb:168:in `to_s' 
from /app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.1.3/lib/active_record/base.rb:1785:in `attribute_for_inspect' 

一些google搜索後,我發現瞭解決方案:HTTP://www.spacebabies.nl/2008/06/16/rails-2-and-rss-parsing-gives -weird-errors/

儘管它是Rails2,它仍然適用於我。 只是改變item.pubDate到item.pubDate.to_s

再次,任何人都可以解釋這裏發生了什麼?

PS,item.pubDate是沒有錯的,在控制檯我可以打印出來,即:

item.pubDate.class => Time 
相關問題