如何检查rake db:seed的进度

时间:2016-01-21 06:50:52

标签: ruby-on-rails-4

我在seeds.rb中有一些数据,我想填充到表中。在seeds.rb文件里面,我正在使用create!方法,以便在出现问题时我收到错误消息。但是当我输入rake db:seed时,我没有得到任何确认说“数据加载成功”之类的内容。我的意思是,我必须去rails db,然后再次检查表。这很好,但我想知道是否有办法为rake db:seed添加成功消息。

2 个答案:

答案 0 :(得分:0)

编辑你的db / seed.rb,在底部添加以下内容

puts "data loaded success"

答案 1 :(得分:0)

是的,您可以在底部添加一个看跌期权,就像@richfisher所说的那样。

这与您的要求不完全相同,但是我通常想知道运行种子时正在创建什么。但是我希望种子文件是幂等的,因此我可以运行它,添加一些新内容,然后再次运行它,仅添加新记录。这导致围绕是否打印某些内容的许多条件。

我最终在种子文件中创建了一个执行find_or_create_by!的函数,然后检查该对象是否是新创建的(created_at不到几秒钟)。如果是新的,我会留言:

def seed(model, attrs, message = nil)
  model.public_send(:find_or_create_by!, attrs).tap do |instance|
    log_created(instance, message)
  end
end

def log_created(instance, message = nil)
  return if instance.created_at < 2.seconds.ago
  message = message || instance&.name || instance.to_param
  puts "Created #{instance.class.name.downcase} - #{message}"
end

# then I use like this:
acme = seed(Project, name: "Acme App")

# it will print out name or `to_param` by default
# if I want to use a custom message:
widget = seed(Widget, { foo: "bar" }, "custom message")

这样,当我运行db:seed时,要么得到有关已创建记录的输出,要么没有输出,这意味着什么也没有创建。