2016-03-04 23 views
0

我是新手在这里。 我有问题,我建立了一个Web使用Ruby on Rails。 我想从json文件中获取数据,然后插入到数据库中。可以随时增加json文件中的数据。所以我应该有一段时间的后台工作。 我已阅读过Ruby文档,它说我可以使用活动作业。 但我仍然混淆这样做。 我应该如何一步一步来做到这一点?或者你们可以举个例子吗?如何使红宝石在轨上读取JSON文件然后传输数据到数据库

无论如何。

+0

您使用基于Linux的操作系统为Rails开发? –

+0

我使用windows base – Dona

+0

检查我的答案以使用ActiveJob,请参阅文档以获取更多详细信息。 –

回答

0

您可以使用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 

Documentations Here

或者,如果你喜欢使用的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 
+0

谢谢。我使用:内联,它非常易于使用。谢谢。 – Dona

+0

不客气:) –

相关问题