在Rails中执行外部文件中的命令

时间:2009-08-19 15:02:30

标签: ruby-on-rails ruby

是否有一种简单的方法让rails操作加载外部命令文件然后执行它们?

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

理想情况下,我希望检查文件是否存在的操作,如果存在,则运行所有命令,然后删除该文件,使其不再执行。

因此,外部文件基本上如下所示:

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

在rails中这很容易实现吗?

一些细化:

这个想法是,如果某个设置表需要在发布后进行修改,并且您无法通过迁移脚本(即从schema.rb文件初始化数据库)这样做你可以:

  1. 创建一个名为“update_data.rb”的文件,例如
  2. 将其放在管理目录中
  3. 在浏览器中定位一些操作(即/ admin / update_data)
  4. 然后Rails将读入文件,逐行执行命令,然后
  5. 完成后删除文件,以便不会再次意外执行操作
  6. 这有帮助吗?它将是一个需要在发布后执行的一次性操作的文件。如果有更好的方法,我肯定都是耳朵!

3 个答案:

答案 0 :(得分:2)

另一种选择是耙。你可以在lib / tasks中创建一个新文件 - 我们称之为你的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

然后从控制台你可以运行rake db:bootstrap并根据需要使用crontab进行安排。

答案 1 :(得分:1)

对于第4步:

load("update_data.rb")

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

答案 2 :(得分:0)