我是新手。 我有问题,我使用Ruby on Rails构建一个Web。 我想从json文件中获取数据然后插入到数据库中。 json文件中的数据可以随时增加。所以我应该有一个后台工作,以一定的间隔运行。 我读过Ruby文档,它说我可以使用Active Job。 但我仍然混淆这样做。 我应该一步一步地做些什么呢?或者你们可以举个例子吗?
非常感谢。
答案 0 :(得分:1)
您可以使用 ActiveJob
活动作业设置
Active Job适配器必须设置为:sidekiq ,否则它将只使用默认值:inline。
这可以在 config / application.rb 中完成,如下所示:
例如:
class Application < Rails::Application
# ...
config.active_job.queue_adapter = :sidekiq
end
接下来,生成Job:
rails generate job Example
示例JSON数据:
{
"title" : "Ruby In Rails",
"url" : "http://rubyinrails.com",
"posts" : {
"1":"strftime-time-format-in-ruby",
"2":"what-is-gemset"
}
}
将创建/app/jobs/example_job.rb
class ExampleJob < ActiveJob::Base
# Set the Queue as Default
queue_as :default
def perform(*args)
# Perform Job
require 'json'
# Open JSON File
root = Rails.root.to_s
file = File.read('#{root}/data.json')
# Parse Data from File
data_hash = JSON.parse(file)
# Do the SAVING and validation HERE...
test = Sample.new
test.title = data_hash['title']
......
test.save
end
end
用法,例如在控制器中:
ExampleJob.perform_later args
或者,如果您希望使用 CRONJOB 来执行该功能:
例如,在Rails应用程序中的 lib / tasks / 中创建一个名为“ save_json.rb ”的文件。
代码:
namespace :save_json do
desc "..."
task :execute => :environment do
require 'json'
# Open JSON File
root = Rails.root.to_s
file = File.read('#{root}/data.json')
#Parse Data from File
data_hash = JSON.parse(file)
#Getting DATA
data_hash['title']
=> "Ruby In Rails"
data_hash.keys
=> ["title", "url", "posts"]
data_hash['posts']
=> { "1" => "strftime-time-format-in-ruby", "2" => "what-is-gemset" }
# Do the SAVING and validation HERE...
test = Sample.new
test.title = data_hash['title']
......
test.save
end
在crontab中设置后台作业功能。
vi /etc/crontab
代码: 例如每分钟 ....
*/1 * * * * cd /my_rails_app && bundle exec rake save_json:execute