我在Heroku上有一个rails 3.1应用程序,我在生产中遇到500错误,我无法在开发中重新创建。
当我尝试在我的一个控制器中执行更新操作时,我得到500.我从heroku日志中获得以下内容 -
2011-12-05T13:52:35+00:00 app[web.1]: Completed 500 Internal Server Error in 15ms
2011-12-05T13:52:35+00:00 app[web.1]:
2011-12-05T13:52:35+00:00 app[web.1]: NoMethodError (undefined method `updated?' for #<ActiveRecord::Associations::HasOneAssociation:0x00000004058800>):
2011-12-05T13:52:35+00:00 app[web.1]: app/controllers/cars_controller.rb:81:in `block in update'
2011-12-05T13:52:35+00:00 app[web.1]: app/controllers/cars_controller.rb:80:in `update'
我的汽车控制器上的更新操作是 -
def update
@car = Car.find_by_url_identifier(params[:id])
respond_to do |format| #**line 80**
if @car.update_attributes(params[:car]) #**line 81**
CarMailer.gift_confirmation(@car).deliver
format.html { redirect_to(thanks_path(@car.url_identifier)) }
else
format.html { render action: "edit" }
end
end
end
发布的参数是 -
{"utf8"=>"✓",
"_method"=>"put",
"authenticity_token"=>"RTXCVvdsKQHc8CxHLeYS9WuztcrI1b4H8SHsdfsKWu+Iz4=",
"car"=>{"name"=>"dgdfsdfsd",
"email"=>"test@test.com",
"recipient_attributes"=>{"name"=>"fdsfsd",
"address1"=>"sdfsdfdsf",
"address2"=>"dsfdsfsdf",
"city"=>"sdfdsf",
"postcode"=>"sdfds"},
"gift_id"=>"2",
"message"=>"fsdfsdfdsf",
"terms"=>"1"},
"commit"=>"submit",
"id"=>"test5"}
我的车型看起来像这样 -
class Car < ActiveRecord::Base
validates :name, :presence =>true, :on => :update
validates :url_identifier, :presence =>true, :on => :create
has_one :recipient
belongs_to :gift
accepts_nested_attributes_for :recipient
accepts_nested_attributes_for :gift
def to_param
self.url_identifier
end
end
知道如何解决这个问题吗?除了查看herokus日志之外,我还可以调试它吗?
奇怪的是,如果我执行'heroku restart',应用程序会工作一段时间
答案 0 :(得分:2)
我在代码中看不到任何错误。由于它适用于您的开发机器,我猜它是另一回事。有些不同。您是否在heroku上运行迁移?
在heroku上部署后,您必须在单独的步骤中运行迁移。我不确定这是否会产生这种错误。只是在这里猜测。
答案 1 :(得分:1)
我用Google搜索了错误消息。您是否看过这个帖子:http://ruby-forum.com/topic/81719他们遇到了类似的问题并发布了他们的解决方案/ hack。也许值得尝试一下。
答案 2 :(得分:0)
看起来你试图将方法update
调用到ActiveRecord::Associations
对象而不是(可能)调用Car
模型,这很奇怪,因为你会认为它会被取出如果它不是Arel中找到的方法,则调用模型。
您可以尝试使用开发环境中的生产环境设置来调试此问题,方法是查看config/enviroments/production.rb
并使用这些设置进行开发。
您还可以尝试使用heroku console