【问题标题】:rake db:seed doesn't do anythingrake db:seed 不做任何事情
【发布时间】:2016-05-18 05:03:26
【问题描述】:

我做了一个小db/seeds.rb文件:

web = Website.find_or_create_by(id: 1) do |w|
  w.website = "http://example.dev/"
  w.banner_msg = "Hey! Banner message!"
  w.signup_msg = "Wahey! Sign up message!"
  w.bg_col = "#333"
  w.txt_col = "#EEE"
  w.btn_col = "#999"
end

pub = Publisher.find_or_create_by(id: 1) do |p|
  p.phone = "021 111 1111"
  p.website = web
end

User.find_or_create_by(id: 1) do |u|
  u.email = 'email@email.com'
  u.password = 'password'
  u.first_name = 'Joe'
  u.last_name = 'Bob'
  u.publisher = pub
end

User.create(id: 5, email: "hello@ds.dfs")

当我运行rake db:seed 时,终端简单地接受命令并显示一个新行,没有错误消息,没有“rake abort!”,什么都没有。

当我检查 Rails 控制台中的字段时,那里什么都没有。发生了什么事?

【问题讨论】:

  • 相信你是在生产环境中做的吧?在这种情况下尝试RAILS_ENV=production rake db:seed
  • @arogachev 在生产环境中运行rake db:seed 有点危险,为什么有人想用假数据植入生产数据库?但是您的方法可能会奏效,尽管使用RAILS_ENV=development 更好,但有任何消息@Mirror318 吗?
  • @Mirror318 也可以尝试添加puts "Users created: #{User.all.count}" 以查看它是否正常工作并在运行 rake 命令时实际创建用户。
  • @bntzio 这取决于。在某些情况下,种子可能包含非假的初始数据。但是对于这个具体的问题,你是对的。
  • @arogachev 你说得对,环境很重要,但我在开发中运行所有东西,而不是在生产中。 @bntzio 我在rails c 中输入User.all 以检查是否发生了任何事情。您的建议可行,但我想我的抱怨是应该出现错误消息,而无需像那样手动设置。

标签: ruby-on-rails ruby-on-rails-4 seeding


【解决方案1】:

您可以使用find_or_create_by!(attributes, &block),它类似于find_or_create_by,但调用create!,因此如果创建的记录无效,则会引发异常。 APIDock

【讨论】:

    【解决方案2】:

    好的,我发现了

    1)颜色被破坏了,这里不允许是3位数字,必须是完整的6位。

    2) 我的关系链错了。我有user 有一个publisher,它有一个website,当模型实际设置时,website 有一个publisher,它有一个user

    我的烦恼是绝对没有错误消息。我必须将seeds.rb 的内容复制并粘贴到Rails 控制台中,然后它说的只是rollback,所以我必须输入user.errors 才能看到user 的错误,对于其他模型也是如此.

    有没有人对这种情况有更好的错误反馈建议?

    【讨论】:

    • 在调用rake db:seed 时附加--trace 选项有助于排除故障。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多