如何在 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

Documentations Here

或者如果您更喜欢 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