Ich habe mehrere sidekiq Arbeiter in meiner Rails 4 App und kann nicht herausfinden, warum die Prozesse fehlschlagen. Ich übergebe die User_id an den Worker als String, aber es scheint nicht den Benutzer zu finden. Aber wenn ich dieselbe ID in meiner Konsole suche, findet sie den Benutzer. Was mache ich falsch? Hier ist mein Code.Rails Sidekiq FEHLER: Objekt kann nicht gefunden werden
Controller.rb
def update
@user = current_user
if @user.bill.update_attributes(bill_params)
RandomWorker.perform_async(@user.id.to_s)
redirect_to users_dashboard_path, :notice => "Payment Informaton Updated"
else
...
end
end
Randomworker.rb
def perform(user_id)
user_id = user_id["$oid"] unless user_id.is_a?(String)
user = User.find(user_id)
user.process.update_report
user.process.save
end
Mein Fehler kommt zurück als
RandomWorker "575a..." Mongoid::Errors::DocumentNotFound: message: Document(s) not found for class User with id(s) 575a.... summary: When calling User.find with an id or array of ids, each parameter...
--EDIT--
Meine db-Konfigurationsdatei ist wie gezeigt:
development:
adapter: sqlite3
database: db/development.sqlite3
pool: 5
timeout: 5000
production:
adapter: sqlite3
database: db/production.sqlite3
pool: 25
timeout: 5000
Und mein mongoid.yml
development:
# Configure available database clients. (required)
clients:
# Defines the default client. (required)
default:
# Defines the name of the default database that Mongoid can connect to.
# (required).
database: development_db
# Provides the hosts the default client can connect to. Must be an array
# of host:port pairs. (required)
hosts:
- localhost:27017
options:
Die Fehler Problem behoben haben zu sagen, dass 'User.find' finden, ist nicht das, was er sucht. Vermutlich ist 'user_id' korrekt, da sie (AFAIK) vom 'perform_async'-Aufruf kommt und nichts auf der Strecke Benutzer löscht (richtig?). Spricht sidekiq mit der gleichen Datenbank wie Ihre App? –
@muistooshort Nichts löscht den Benutzer und ich glaube, es ist mit der richtigen db sprechen, also wie bestätige ich, dass es mit der gleichen db spricht? – SupremeA
Ich weiß nichts über sidekiq, also weiß ich nicht, woher es seine Konfiguration bekommen würde. Sie könnten sich '' Mongoid.default_session' 'im sidekiq-Job ansehen und sehen, ob es die richtigen Einstellungen hat.Sie können sich auch die 'user_id' anschauen und sicherstellen, dass es so ist, wie Sie es erwarten. –