我的环境是使用Ruby 2.0和Rails 4的Macbook OSX 10.7 Lion。
我是RoR的新手。我使用脚手架建立了一个带有一个列数据库的网站 这只是一个关于天气的小网站 我想每小时向数据库输入学位 我找到了宝石clockwork,但我不知道如何在我的项目中使用它。
我写了clock.rb
并将其放在我的项目文件中并运行rails s
但没有任何反应。
这是myproject / clock.rb
的myproject / clock.rb
require 'clockwork'
module Clockwork
handler do |job|
puts "Running #{job}"
every(1 hours, ''){
Mydata.create(:degree => input_data)
}
end
我该怎么做或者我应该把文件放在哪里?
他们说我需要使用$ clockwork clock.rb
,但是当我运行rails s
时,就没有办法使用它了......
非常感谢。
答案 0 :(得分:2)
如official docs中所述,您需要做一些事情。
设置时钟文件,我已将其设置为app/clock.rb
需要'发条' 模块发条
handler do |job|
case job
when 'weather.input_degree'
Mydata.create degree: input_data
# when 'some_other_task'
# ...
else
puts "Couldn't find your job!"
end
end
every(1.hour, 'weather.input_degree') # the string indicates an arbitrary job name
# every(20.seconds, 'weather.some_other_task')
端
启动过程。关键是使用Foreman
之类的东西$ gem install foreman
在应用的根目录中创建名为Procfile
的文件:
web: bundle exec rails -s
clock: bundle exec clockwork app/clock.rb
# any_other_service_you_want: bash script here
启动服务器
$ foreman start
答案 1 :(得分:1)
gem 'clockwork'
示例
在/ lib目录下创建文件clock.rb
clock.rb
require File.expand_path('../../config/boot', __FILE__)
require File.expand_path('../../config/environment', __FILE__)
require 'clockwork'
include Clockwork
module Clockwork
## Here Student is a domain class, having a method insertRecord to
## insert a record in DB
every(20.seconds, 'job Inserting Record in DB') { Student.insertRecord }
end
运行时钟字的命令
bundle exec clockwork lib/clock.rb
答案 2 :(得分:0)
您可以使用Cron。编写一个rake任务并从Cron调用rake任务以重复进程。
示例(将其添加到cron以每小时运行一次任务):
0 * * * * cd /home/projectdir;rake do:task
答案 3 :(得分:0)
此代码需要保留在处理程序块之外:
every(1.hour, ''){ Mydata.create(:degree => input_data) }
你可以像这样执行时钟:
bundle exec clockwork clock.rb