Rails 生产中缺少方法?
Rails Method missing in 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" = 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 不为零。
我已经尝试在 heroku 控制台中玩耍并创建一个 micropost 对象并设置并获取 parent_id 它工作得很好。
那么这里有什么问题呢?我迷路了:(
由于它在生产环境中的控制台中运行,因此这些更改肯定会进入生产环境。这可能意味着 rails 应用程序需要重新启动。
heroku restart -a app_name
为什么我的应用程序必须重新启动?
您可能已经注意到,有时当您将代码推送到生产环境并且从未重新启动服务时,事情仍然有效!那是因为 rails 有一个 autoload feature that reloads certain code automatically. However it only reloads under certain conditions.
在 this article 中(虽然有点过时),解释了重新加载及其工作原理。
在这种情况下,在更新架构时,代码不会自动重新加载,因此必须手动重新启动服务器。
建议
部署时,总是运行迁移并重启服务器。你会避免这样的情况。
关于 Heroku 的一些小技巧
将应用程序投入生产(或暂存)后立即执行的操作
保证好css,运行RAILS_ENV=production bundle exec rake assets:precompile
在你的push
之后,总是运行heroku run rake db:migrate
现在,重置你的服务器heroku restart
css有问题? heroku run RAILS_ENV=production bundle exec rake assets:precompile
希望对您有所帮助! :)
我刚刚将 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" = 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 不为零。 我已经尝试在 heroku 控制台中玩耍并创建一个 micropost 对象并设置并获取 parent_id 它工作得很好。 那么这里有什么问题呢?我迷路了:(
由于它在生产环境中的控制台中运行,因此这些更改肯定会进入生产环境。这可能意味着 rails 应用程序需要重新启动。
heroku restart -a app_name
为什么我的应用程序必须重新启动?
您可能已经注意到,有时当您将代码推送到生产环境并且从未重新启动服务时,事情仍然有效!那是因为 rails 有一个 autoload feature that reloads certain code automatically. However it only reloads under certain conditions.
在 this article 中(虽然有点过时),解释了重新加载及其工作原理。
在这种情况下,在更新架构时,代码不会自动重新加载,因此必须手动重新启动服务器。
建议
部署时,总是运行迁移并重启服务器。你会避免这样的情况。
关于 Heroku 的一些小技巧
将应用程序投入生产(或暂存)后立即执行的操作
保证好css,运行
RAILS_ENV=production bundle exec rake assets:precompile
在你的
push
之后,总是运行heroku run rake db:migrate
现在,重置你的服务器
heroku restart
css有问题?
heroku run RAILS_ENV=production bundle exec rake assets:precompile
希望对您有所帮助! :)