2017-05-31 1 views
0

J'essaie de lancer une méthode toutes les minutes à l'aide du planificateur sidekiq. Mais lorsque j'essaie d'exécuter le travail cron, ma base de données n'est pas accessible.Rails 5: Impossible d'accéder à ma base de données lors de l'utilisation du planificateur Sidekiq avec Redis

Ceci est mon code du contrôleur

#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 

Lorsque je tente d'exécuter la tâche cron comme celui-ci,

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

je reçois une erreur disant

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>' 

Est-ce erreur parce que du serveur Redis? Si oui, comment puis-je accéder à mes modèles et bases de données existants?

Répondre

0

Le problème est dans votre commande sidekiq:

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

Vous ne pouvez pas exiger directement un contrôleur spécifique comme ça, car il ne sait pas où la superclasse est-à-dire votre contrôleur ne nécessite pas explicitement la application_controller.rb fichier, d'où cette erreur.

états d'utilisation de Sidekiq:

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

Cela suggère que vous lui donnez le répertoire dans lequel votre application Rails est pas un contrôleur individuel. Mais, si vous exécutez la commande sidekiq à partir du répertoire de votre application Rails puis:

vous n'avez pas besoin de l'option -r

il suffit de lancer sidekiq

+0

Après le débogage d'un tas d'erreurs après l'exécution de la instruction, j'ai une dernière erreur en disant méthode undefined 'relative_url_root = 'pour ActionDispatch :: Routing :: RouteSet: Classe –

+0

@raghav_vc Il serait plus utile de commencer une nouvelle question avec cette erreur et les exemples de code et de marquer cette question comme fermé ou résolu. – DiegoSalazar