生产中缺少Rails方法?

时间:2015-10-24 18:11:10

标签: ruby-on-rails ruby-on-rails-4 heroku production

我刚刚将我的dev / test中的一些新功能发布到heroku生产中。我已经实现了通过让微博模型通过parent_id自我加入来为微博添加注释的可能性。

在dev中,当我在dev中使用该功能时,它可以正常工作,控制台会说以下内容用于生产:

2015-10-24T17:59:54.974585+00:00 app[web.1]: Started POST "/microposts" for 91.35.226.128 at 2015-10-24 17:59:54 +0000
2015-10-24T17:59:54.979271+00:00 app[web.1]:   Car Load (1.0ms)  SELECT  "cars".* FROM "cars" WHERE "cars"."id" = $1 LIMIT 1  [["id", 1]]
2015-10-24T17:59:54.981868+00:00 app[web.1]: 
2015-10-24T17:59:54.981869+00:00 app[web.1]: NoMethodError (undefined method `parent_id=' for #<Micropost:0x007f9f3036b290>):
2015-10-24T17:59:54.981870+00:00 app[web.1]:   app/controllers/microposts_controller.rb:11:in `create'
2015-10-24T17:59:54.981871+00:00 app[web.1]: 
2015-10-24T17:59:54.981871+00:00 app[web.1]: 
2015-10-24T17:59:54.976228+00:00 app[web.1]:   Parameters: {"utf8"=>"✓", "authenticity_token"=>"*", "micropost"=>{"content"=>"Oooooder???"}, "parent_id"=>"37", "car_id"=>"2"}

它抱怨的相应代码是这里的最后一行:

  def create
    @micropost = current_users_car.microposts.build(micropost_params)
    if !params[:id].nil?
    @micropost.car_id = params[:id]
    end
    @micropost.user_id = current_user.id
    @micropost.parent_id = params[:parent_id]

由于它上面的行有效,我认为@micropost不是nil。 我已经尝试在heroku控制台中玩游戏并创建一个微博客对象并设置并获得完全正常工作的parent_id。 那么这里有什么问题?我迷路了:(

2 个答案:

答案 0 :(得分:1)

由于它在生产控制台中起作用,因此这些变化肯定使其投入生产。这可能意味着需要重新启动rails应用程序。

heroku restart -a app_name

为什么我的应用必须重新启动?

您可能已经注意到,有时当您将代码推送到生产并且从未重新启动过服务时,事情仍然有效!因为rails有一个autoload feature可以自动重新加载某些代码。 然而它只会在certain conditions下重新加载。

this article中(虽然有点陈旧),解释了重装及其工作原理。

在这种情况下,在更新架构时,代码未自动重新加载,因此必须手动重新启动服务器。

建议

部署时,始终运行迁移并重新启动服务器。你会避免这样的情况。

答案 1 :(得分:1)

关于Heroku的一些提示

将您的应用程序发送到生产(或登台)

后立即执行的操作
  1. 要确保良好的CSS,请运行RAILS_ENV=production bundle exec rake assets:precompile

  2. push之后,请始终运行heroku run rake db:migrate

  3. 现在,重置您的服务器heroku restart

  4. css的问题? heroku run RAILS_ENV=production bundle exec rake assets:precompile

  5. 我希望它有所帮助! :)