Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 4 Sidekiq根本找不到ActiveRecord对象_Ruby On Rails_Ruby_Ruby On Rails 4_Activerecord_Sidekiq - Fatal编程技术网

Ruby on rails Rails 4 Sidekiq根本找不到ActiveRecord对象

Ruby on rails Rails 4 Sidekiq根本找不到ActiveRecord对象,ruby-on-rails,ruby,ruby-on-rails-4,activerecord,sidekiq,Ruby On Rails,Ruby,Ruby On Rails 4,Activerecord,Sidekiq,我使用的是Rails 4.2.6和sidekiq 4.2.2。我总是犯这样的错误 2017-02-23T07:33:23.455Z 31886 TID-ovz89uiyg WARN: {"class":"ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper","wrapped":"ActionMailer::DeliveryJob","queue":"mailers","args":[{"job_class":"ActionMailer::De

我使用的是Rails 4.2.6和sidekiq 4.2.2。我总是犯这样的错误

2017-02-23T07:33:23.455Z 31886 TID-ovz89uiyg WARN: {"class":"ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper","wrapped":"ActionMailer::DeliveryJob","queue":"mailers","args":[{"job_class":"ActionMailer::DeliveryJob","job_id":"d59ec97f-b858-4f47-aefd-c9150836d7d2","queue_name":"mailers","arguments":["UserMailer","send_password","deliver_now",{"_aj_globalid":"gid://my-app/User/85"},"http://0.0.0.0:3000/auth/password/edit?config=default&reset_password_token=zBdjahtAX7w3BC3Si8Fz&redirect_url="],"locale":"en"}],"retry":true,"jid":"f5dfa96df15443fc7ed2f3ce","created_at":1487832182.7783082,"enqueued_at":1487835165.842009,"error_message":"Error while trying to deserialize arguments: Couldn't find User with 'id'=85","error_class":"ActiveJob::DeserializationError","failed_at":1487832182.8214011,"retry_count":7,"retried_at":1487835203.4498932}
我在向用户发送重置密码电子邮件时遇到上述错误

我用这个代码在后台发送邮件

UserMailer.send_password(self.id, reset_password_link).deliver_later
我尝试了以下方法:

UserMailer.send_password(self.id, reset_password_link).deliver_later(wait: 1.minutes)
我还尝试了after_commit回调,如以下文档所示:

我传递的是ID,而不是对象本身。我仍然得到了上面的错误。我将sidekiq版本更新为4.2.9,重新启动了sidekiq

还是一样的错误。在sidekiq内部找不到ActiveRecord对象。我试着用byebug在sidekiq里面找到非常古老的东西。但是sidekiq找不到ActiveRecord对象

我尝试了1天,我创建了worker(比如'SendResetPasswordWorker'),而不是delay\u-later方法。还是一样的错误吗

{"class":"SendResetPasswordWorker","args":[90,"http://0.0.0.0:3000/auth/password/edit?config=default&reset_password_token=8xTR5enYdHDpuQg6cyPZ&redirect_url="],"retry":true,"queue":"default","jid":"7a8a831d837d3e4f3d75d5f7","created_at":1487842213.2409139,"enqueued_at":1487842213.240968,"error_message":"Couldn't find User with 'id'=90","error_class":"ActiveRecord::RecordNotFound","failed_at":1487842213.267404,"retry_count":0}2017-02-23T09:30:13.268Z 35119 TID-ow2w9e41c WARN: ActiveRecord::RecordNotFound: Couldn't find User with 'id'=90 2017-02-23T09:30:13.268Z 35119 TID-ow2w9e41c WARN: /Users/abhilash/.rbenv/versions/2.2.1/gemsets/gauge-slcsl/gems/activerecord-4.2.6/lib/active_record/core.rb:155:in `find' /Users/abhilash/my-app/components/auth/app/workers/
我还测试了另一个worker“UserAgentWorker”,这是另一个场景,但仍然是相同的错误


有人对这个错误有什么想法吗?如果是,请分享。

我终于找到了答案。我正在使用公寓Gem进行多租户租赁。在sidekiq内部,postgres中的默认模式返回到“public”,而不是我的当前模式。因此,每当sidekiq运行后台作业时,我都必须切换回当前租户模式


当我们在后台运行代码时,真的需要一直切换回模式吗?也许我们可以在sidekiq中进行设置,只要它启动作业,就将模式切换到当前租户。我将对此进行检查,以找到最佳解决方案。谢谢。

我终于找到了答案。我正在使用公寓Gem进行多租户租赁。在sidekiq内部,postgres中的默认模式返回到“public”,而不是我的当前模式。因此,每当sidekiq运行后台作业时,我都必须切换回当前租户模式


当我们在后台运行代码时,真的需要一直切换回模式吗?也许我们可以在sidekiq中进行设置,只要它启动作业,就将模式切换到当前租户。我将对此进行检查,以找到最佳解决方案。谢谢。

您是否在与主应用程序相同的环境中运行Sidekiq?例如,应用程序可能使用
生产
数据库,而Sidekiq可能在
开发
中运行,因此从不同的数据库读取。应用程序和Sidekiq在开发环境中运行。您是否在与主应用程序相同的环境中运行Sidekiq?例如,应用程序可能使用
生产
数据库,而Sidekiq可能在
开发
中运行,因此从不同的数据库读取。应用程序和Sidekiq在开发环境中运行。