2009-08-19 46 views
1

有没有简单的方法让rails动作加载一个外部命令文件,然后执行它们?从Rails的外部文件执行命令

例如,我试图编写一堆rails创建方法来预先填充数据库中的一堆表。

理想情况下,我想的动作来检查文件是否存在,如果存在,运行所有的命令,然后删除该文件,因此它不会再次执行。

因此,外部文件将基本上是这样的:

MyTable.create :name => "New 1" 
MyTable.create :name => "New 2" 

这是很容易在轨完成?

一些阐述:

的想法是,如果一组特定表需要释放之后被感动了,你无法通过迁移脚本做到这一点(即你正在初始化从schema.rb文件数据库),你可以:

  1. 创建一个名为“update_data.rb”例如
  2. 将其放在admin目录
  3. 目标在浏览器中的一些动作(即文件/ admin/update_data)
  4. 01然后条
  5. 的Rails会在文件中读取,执行这些命令行由行,然后在完成时
  6. 删除文件,这样的行动是不小心再次执行

这是否帮助?这将是一个需要在发布后执行的一次性操作的文件。如果有更好的方法,我当然都是耳朵!

+0

你好贾斯汀。你能详细说明你想解决什么问题吗?我很好奇,因为这是一次学习我不知道的东西或者向你提供更好的解决方案的机会。 – Petros 2009-08-19 15:09:01

+0

增加了一些详细说明 - 感谢您的反馈 – jerhinesmith 2009-08-19 15:19:54

回答

2

另一种选择是耙。您可以创建的lib /任务的新文件 - 我们会打电话给你bootstrap.rake

namespace :db do 
    desc 'Load an initial set of data' 
    task :bootstrap => :environment do 
    if your_file_exists 
     puts 'Loading data...' 
     this_is_where_the_magic_happens   
    end 
    end 
end 

然后从您可以运行耙分贝控制台:引导,如果你喜欢的crontab调度。

+0

“:bootstrap =>:environment”代表了什么?我猜bootstrap是任务的名称,但'=>:environment'会添加什么?这只是提出了一个要求:环境的定义? – jerhinesmith 2009-08-19 15:36:29

+0

调用开发模式:rake db:bootstrap生产模式:rake db:bootstrap RAILS_ENV =生产 – 2009-08-19 15:41:17

+0

明白了,这很有道理。 – jerhinesmith 2009-08-19 15:50:03

1

步骤4:

load("update_data.rb") 

我相信这会加载并执行脚本。