我是新手在这里。 我有问题,我建立了一个Web使用Ruby on Rails。 我想从json文件中获取数据,然后插入到数据库中。可以随时增加json文件中的数据。所以我应该有一段时间的后台工作。 我已阅读过Ruby文档,它说我可以使用活动作业。 但我仍然混淆这样做。 我应该如何一步一步来做到这一点?或者你们可以举个例子吗?如何使红宝石在轨上读取JSON文件然后传输数据到数据库
无论如何。
我是新手在这里。 我有问题,我建立了一个Web使用Ruby on Rails。 我想从json文件中获取数据,然后插入到数据库中。可以随时增加json文件中的数据。所以我应该有一段时间的后台工作。 我已阅读过Ruby文档,它说我可以使用活动作业。 但我仍然混淆这样做。 我应该如何一步一步来做到这一点?或者你们可以举个例子吗?如何使红宝石在轨上读取JSON文件然后传输数据到数据库
无论如何。
您可以使用ActiveJob
活动作业设置
活动作业适配器必须设置为:sidekiq,否则将只使用默认:内联。
这可以在配置/ application.rb中这样来完成:
例如:
class Application < Rails::Application
# ...
config.active_job.queue_adapter = :sidekiq
end
接着,生成作业:
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该功能:
例如制作一档名为 “save_json.rb” 里面LIB/tasks/在您的Rails应用程序中。
代码:在crontab中
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
设置后台作业功能。
vi /etc/crontab
代码: 例如每分钟 ....
*/1 * * * * cd /my_rails_app && bundle exec rake save_json:execute
谢谢。我使用:内联,它非常易于使用。谢谢。 – Dona
不客气:) –
您使用基于Linux的操作系统为Rails开发? –
我使用windows base – Dona
检查我的答案以使用ActiveJob,请参阅文档以获取更多详细信息。 –