【问题标题】:Seeds database every time I run rails server每次运行 rails 服务器时的种子数据库
【发布时间】:2013-11-18 20:27:20
【问题描述】:

我知道为数据库播种,我运行 rake db:seed 和一切。我的种子.rb 文件已全部设置完毕:

users = [{:name => 'User1 Lastname', :email => 'user1@example.com', :password => 'password'},
         {:name => 'User2', :email => 'user2@example.com', :password => 'password'},
         {:name => 'User3', :email => 'user3@example.com', :password => 'password'},
         {:name => 'User4', :email => 'user4@example.com', :password => 'password'},
         {:name => 'User5', :email => 'user5@example.com', :password => 'password'},
         {:name => 'User6', :email => 'user6@example.com', :password => 'password'},
         {:name => 'User7', :email => 'user7@example.com', :password => 'password'},
         {:name => 'User8', :email => 'user8@example.com', :password => 'password'},
         {:name => 'User9', :email => 'user9@example.com', :password => 'password'},
         {:name => 'User10', :email => 'user10@example.com', :password => 'password'},
         {:name => 'User11', :email => 'user11@example.com', :password => 'password'},
         {:name => 'User12', :email => 'user12@example.com', :password => 'password'},
         {:name => 'User13', :email => 'user13@example.com', :password => 'password'},
         {:name => 'User14', :email => 'user14@example.com', :password => 'password'},
         {:name => 'User15', :email => 'user15@example.com', :password => 'password'},
         {:name => 'User16', :email => 'user16@example.com', :password => 'password'},
         {:name => 'User17', :email => 'user17@example.com', :password => 'password'},
         {:name => 'User18', :email => 'user18@example.com', :password => 'password'},
         {:name => 'User19', :email => 'user19@example.com', :password => 'password'},
         {:name => 'User20', :email => 'user20@example.com', :password => 'password'},
     ]

users.each do |user|
  User.create(user)
end

但是现在每当我运行rails server 时,它都会再次播种它们!我以为只有在运行rake db:seed时才会发生这种情况@

~$ rails server
=> Booting WEBrick
=> Rails 3.2.14 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
Connecting to database specified by database.yml
   (0.1ms)  begin transaction
  User Exists (21.5ms)  SELECT 1 AS one FROM "users" WHERE LOWER("users"."email") = LOWER('user1@example.com') LIMIT 1
   (0.1ms)  rollback transaction
   (0.1ms)  begin transaction
  User Exists (1.4ms)  SELECT 1 AS one FROM "users" WHERE LOWER("users"."email") = LOWER('user2@example.com') LIMIT 1
   (0.1ms)  rollback transaction
   (0.1ms)  begin transaction
  User Exists (1.3ms)  SELECT 1 AS one FROM "users" WHERE LOWER("users"."email") = LOWER('user3@example.com') LIMIT 1
   (0.1ms)  rollback transaction

等 20 个用户然后启动它:

[2013-11-07 00:59:14] INFO  WEBrick 1.3.1
[2013-11-07 00:59:14] INFO  ruby 1.9.3 (2013-06-27) [i686-linux]
[2013-11-07 00:59:14] INFO  WEBrick::HTTPServer#start: pid=1742 port=3000

任何帮助将不胜感激!!谢谢你

【问题讨论】:

  • 我没有得到反对票和接近票,因为很清楚要问什么。您是否碰巧在 config/initializers/ 中有一个可能导致这种行为的自定义文件?
  • 在您的seeds.rb 中插入一个raise,堆栈跟踪应该指向正确的方向。
  • 它不应该运行种子任务,所以这可能是你介绍的。您是否添加了自定义初始化程序或以编程方式调用种子? +1 插入加注,可能会有所帮助。
  • 原来是在我的初始化程序中。另一个队友抄过来测试,忘记拿出来了。谢谢大家!
  • 能否请你把你的问题拉下来,或者自己回答。这里有很多人愿意回答未回答的问题。而这个问题肯定会浪费他们的时间。好吧,它确实浪费了我的。谢谢。

标签: ruby-on-rails ruby


【解决方案1】:

我做种子如下:

users = []
20.times do |n|
  user << {:name => "Oleg#{n} Sobchuk",
           :email => "user#{n}@example.com",
           :password => 'password'}
end

users.each do |user|
  User.find_or_create_by_name_and_email_and_password(user[:name],
                                                     user[:email],
                                                     user[:password])
end

对于我来说,它是遵循 DRY 和清晰!

【讨论】:

    【解决方案2】:

    原来是在我的初始化程序中。另一个队友抄过来测试,忘记拿出来了。谢谢大家!

    【讨论】:

      猜你喜欢
      • 2019-03-05
      • 2023-04-08
      • 2012-12-09
      • 1970-01-01
      • 2011-02-05
      • 2014-10-31
      • 1970-01-01
      • 2019-03-09
      • 2018-07-07
      相关资源
      最近更新 更多