2017-05-31 1 views
0

Ich versuche, jede Minute eine Methode mit dem Sidekiq-Scheduler auszuführen. Aber wenn ich versuche, den Cron-Job auszuführen, ist meine Datenbank nicht zugänglich.Rails 5: Ich kann nicht auf meine Datenbank zugreifen, während ich den Sidekiq-Scheduler mit Redis verwende.

Dies ist mein Controller-Code

#product_controller.rb 

require 'sidekiq-scheduler' 

class ProductsController < ApplicationController 
    include ApplicationHelper 
    include Sidekiq::Worker 

    def task 
    Product.each do |product| 
     product.price.push(get_price_from_link(product.flipkart_link)) 
     product.time.push(Time.now) 
     product.save! 
    end 
    end 

private 

    def product_params 
    params.require(:product).permit(:flipkart_link, :flipkart_id, :name, :category, :image_url, :max_price, :price, :available, :target_price, :user_id) 
    end 
end 


#sidekiq.yml 

:schedule: 
    cron_task: 
    cron: '0 * * * * *' # Runs once per minute 
    class: ProductsController 

Wenn ich versuche, den Cron-Job wie dies auszuführen,

sidekiq -r ./app/controllers/products_controller.rb 

ich einen Fehler sagen

uninitialized constant ApplicationController 
/home/raghav/workspace/apps/Shotgun/app/controllers/products_controller.rb:3:in `<top (required)>' 
/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:120:in `require' 
/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:120:in `require' 
/var/lib/gems/2.3.0/gems/sidekiq-5.0.0/lib/sidekiq/cli.rb:262:in `boot_system' 
/var/lib/gems/2.3.0/gems/sidekiq-5.0.0/lib/sidekiq/cli.rb:54:in `run' 
/var/lib/gems/2.3.0/gems/sidekiq-5.0.0/bin/sidekiq:12:in `<top (required)>' 
/usr/local/bin/sidekiq:23:in `load' 
/usr/local/bin/sidekiq:23:in `<main>' 

diesen Fehler ist, weil vom Redis-Server? Wenn ja, wie kann ich auf meine vorhandenen Modelle und Datenbanken zugreifen?

Antwort

0

Das Problem ist in Ihrem sidekiq Befehl:

sidekiq -r ./app/controllers/products_controller.rb 

Sie nicht direkt einen bestimmten Controller so erfordern kann, da er nicht weiß, wo die übergeordnete Klasse ist also der Controller nicht explizit die application_controller.rb erfordern Datei, daher dieser Fehler.

Sidekiq die Benutzungszustände:

-r, --require [PATH|DIR] Location of Rails application with workers or file to require 

Dies ist darauf hindeutet, Sie geben ihm das Verzeichnis, in dem Sie Ihre Rails-Anwendung ist, nicht eine individuelle Steuerung. Aber, wenn Sie den sidekiq Befehl aus dem Verzeichnis Ihrer Rails-Anwendung laufen dann:

brauchen Sie nicht die Option -r

einfach sidekiq laufen

+0

Nach Debuggen einer Reihe von Fehlern nach der Ausführung Aussage, ich habe einen letzten Fehler sagen undefined Methode 'relative_url_root = 'für ActionDispatch :: Routing :: RouteSet: Klasse –

+0

@raghav_vc Es wäre hilfreicher, eine neue Frage mit diesem Fehler und Code-Beispiele zu starten und diese Frage zu markieren als geschlossen oder aufgelöst. – DiegoSalazar

Verwandte Themen