如何在 rails 上的 ruby 中创建一个活动作业以读取 json 文件然后将数据传输到数据库
How to make an active job in ruby on rails to read json file then transfer data to database
我是新手。
我有问题,我在 Rails 上构建了一个网络使用 Ruby。
我想从 json 文件中获取数据,然后插入到数据库中。
json 文件中的数据可以随时增加。所以我应该在一定的时间间隔内有一个 运行 的后台工作。
我看过 Ruby 文档,它说我可以使用 Active Job。
但我仍然困惑于这样做。
我应该怎么做才能让它成为现实?或者你们可以举个例子吗?
还是谢谢你。
您可以使用 ActiveJob
活动作业设置
Active Job 适配器必须设置为 :sidekiq 否则它将简单地使用默认的 :inline。
这可以在 config/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
或者如果您更喜欢 USE CRONJOB 该功能:
例如,在 lib/tasks/ 中创建一个名为“save_json.rb”的文件 Rails申请。
代码:
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
我是新手。 我有问题,我在 Rails 上构建了一个网络使用 Ruby。 我想从 json 文件中获取数据,然后插入到数据库中。 json 文件中的数据可以随时增加。所以我应该在一定的时间间隔内有一个 运行 的后台工作。 我看过 Ruby 文档,它说我可以使用 Active Job。 但我仍然困惑于这样做。 我应该怎么做才能让它成为现实?或者你们可以举个例子吗?
还是谢谢你。
您可以使用 ActiveJob
活动作业设置
Active Job 适配器必须设置为 :sidekiq 否则它将简单地使用默认的 :inline。
这可以在 config/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
或者如果您更喜欢 USE CRONJOB 该功能:
例如,在 lib/tasks/ 中创建一个名为“save_json.rb”的文件 Rails申请。
代码:
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