在Ruby on Rails上运行脚本模块

时间:2014-10-01 09:14:16

标签: ruby-on-rails ruby csv import

目前我需要将.CSV文件导入我的应用程序。

我发现此代码(由之前的开发人员制作)将用作导入程序。但我不知道如何运行这个脚本。与/ tasks不同吗?因为当我运行rake -T时它没有显示。

require 'csv'

module Migrators
  module Groups
    class << self

      def import!
        Post.skip_callback :create, :before, :set_last_action_at
        Post.skip_callback :create, :after, :create_memberhip_of_owner

        CSV.foreach(Rails.root.to_s + '/db/lagacy/groups.csv', :headers => true) do |row|
          group = Group.new(row.to_hash)
          group.save(:validate => false)
        end
        # Update last_action_at to created_at
        Group.where('last_action_at IS NULL').update_all('last_action_at = created_at')
        Group.find_by_sql("SELECT setval('groups_id_seq', (SELECT MAX(id) FROM groups))")

        Post.set_callback :create, :before, :set_last_action_at
        Post.set_callback :create, :after, :create_memberhip_of_owner
      end

    end

  end
end

1 个答案:

答案 0 :(得分:0)

您可以为此创建一个rake任务。

使用以下语法在lib / tasks /中创建一个rake文件.rake:

namespace :yourtask_namespace do
  desc "task description" (it is optional but recommended, this way if you do "rake -T yourtask" it will show your task)
  task :yourtask_name => :environment do
    Migrators::Groups.import!
  end
end

然后你可以用&#34; rake your_task_namespace调用它:your_task_name&#34;使用可选的RAILS_ENV =如果它不是开发。

我在工作,不能指定更多样本。

希望它有所帮助。

以下是rake任务的示例:rake task

编辑:

如果您无法创建rake任务,则可以通过以下方式创建脚本文件:

添加到文件#!/usr/bin/env ruby

的第一行

在文件的最后一行..调用要执行的方法,然后运行脚本。