2015-02-05 1 views
0

Я пытаюсь использовать rufus-scheduler для вызова моей модели Ruby on Rails под названием HelloWorld.Использовать планировщик Rufus для вызова моего класса модели

Однако ниже не удается из-за ошибки в моей консоли:

scheduler caught exception:

undefined method 'Foo' for #<Class:0x23371e0 ================================================================================ scheduler caught exception: undefined method 'Foo' for #<Class:0x23371e0> C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.21/lib/active_record/dynamic_matchers.rb:55:in 'method_missing' C:/my-dash/config/initializers/scheduler.rb:6:in 'block in <top (required)>' C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/rufus-scheduler-2.0.24/lib/rufus/sc/jobs.rb:230:in 'call' C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/rufus-scheduler-2.0.24/lib/rufus/sc/jobs.rb:230:in 'trigger_block' C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/rufus-scheduler-2.0.24/lib/rufus/sc/jobs.rb:204:in 'block in trigger' C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/rufus-scheduler-2.0.24/lib/rufus/sc/scheduler.rb:430:in 'call' C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/rufus-scheduler-2.0.24/lib/rufus/sc/scheduler.rb:430:in 'block in trigger_job'

Я предполагаю, что я не называю свою модель из планировщика правильно?

Внутри файла 'config\initializers\scheduler.rb' У меня есть следующие:

require 'rufus-scheduler' 
scheduler = Rufus::Scheduler.new 
scheduler.every '10s' do  
HelloWorld::Foo.new 
end 

Мой класс Модель называется HelloWorld в 'app\models\helloworld.rb' содержит:

class HelloWorld < ActiveRecord::Base 
attr_accessible :my_name 

def Foo 
    my_var = "Some text here" 
    #and then do some more stuff here... 
end 
end 
+0

Что происходит, когда вы вызываете HelloWorld :: Foo.new вне планировщика (например, из контроллера)? – jmettraux

+0

Пожалуйста, включите также полную обратную ошибку ошибки, а не только начало ее первой строки. – jmettraux

+1

@jmettraux Обновлено с полной ошибкой сейчас :) – user2402135

ответ

0

Попробуйте с

HelloWorld.new.foo 

вместо

HelloWorld::Foo.new 

Ваша проблема не имеет ничего общего с rufus-scheduler или Rails, это просто вы пытаетесь вызвать метод экземпляра непосредственно в классе. Потратьте время, чтобы изучить Ruby.

Вы можете играть с этой программой, просто Руби и вы, не Рельсы, нет Руфус-планировщика:

class HelloWorld 
    def Foo 
    puts "Foo" 
    end 
end 

begin 
    HelloWorld::Foo 
rescue => x 
    p x 
end 

begin 
    HelloWorld::Foo.new 
rescue => x 
    p x 
end 

begin 
    HelloWorld.new.Foo 
rescue => x 
    p x 
end 

Запуск программы выше, дает:

#<NameError: uninitialized constant HelloWorld::Foo> 
#<NameError: uninitialized constant HelloWorld::Foo> 
Foo 

Или же эта программа не может быть проще:

class Dog 
    def bark 
    puts "woa" 
    end 
end 

Какой код не даст никаких исключений:

Dog::bark.new 

или

rex = Dog.new 
rex.bark 

?

Смежные вопросы