我使用他们的 cleardb mysql 插件在 heroku 上托管了一个简单的 rails 应用程序。我在本地开发mysql。我在 heroku 上的生产数据库上播种数据时遇到问题。
我的种子数据在 db/seeds.rb 中看起来像这样。该应用程序正在使用伪造品和制造宝石。我有一个用户模型和一个人模型。
Fabricator(:user) do
first_name { Faker::Name.first_name }
last_name { Faker::Name.last_name }
birthday { Faker::Date.backward(14000) }
phone_number { Faker::PhoneNumber.phone_number }
street { Faker::Address.street_address }
city { Faker::Address.city }
state { Faker::Address.state_abbr }
zip_code { Faker::Address.zip }
education { "Bachelor" }
image { File.open("app/assets/images/helloworld.jpg")}
end
Fabricator(:person) do
full_name { Faker::Name.name }
email { Faker::Internet.email }
image { File.open("app/assets/images/puppy.jpg")}
friend_test { 0 }
user
end
#40.times { Fabricate(:user)} #comment this out because running the below command will generate user already
40.times { Fabricate(:person)}
Person.create(full_name: "Ben Franklin", email: "ben@gmail.com", friend_test: 0, image: File.open("app/assets/images/puppy.jpg"), user_id: 1)
Person.create(full_name: "George Washington", email: "george@gmail.com", friend_test: 0, image: File.open("app/assets/images/puppy.jpg"), user_id: 1)
Person.create(full_name: "John Adam", email: "john@gmail.com", friend_test: 0, image: File.open("app/assets/images/puppy.jpg"), user_id: 1)
Person.create(full_name: "Barack Obama", email: "barack@gmail.com", friend_test: 0, image: File.open("app/assets/images/puppy.jpg"), user_id: 2)
Person.create(full_name: "John Kennedy", email: "john@gmail.com", friend_test: 0, image: File.open("app/assets/images/puppy.jpg"), user_id: 2)
Person.create(full_name: "Andrew Jackson", email: "andrew@gmail.com", friend_test: 0, image: File.open("app/assets/images/puppy.jpg"), user_id: 2)
Person.create(full_name: "Jimmy Carter", email: "jimmy@gmail.com", friend_test: 0, image: File.open("app/assets/images/puppy.jpg"), user_id: 3)
Person.create(full_name: "Gerald Ford", email: "gerald@gmail.com", friend_test: 0, image: File.open("app/assets/images/puppy.jpg"), user_id: 3)
Person.create(full_name: "Richard Nixon", email: "richard@gmail.com", friend_test: 0, image: File.open("app/assets/images/puppy.jpg"), user_id: 3)
最初我认为它没有正确播种,因为我没有正确清除数据库(因为 heroku 不能很好地与 mysql 配合使用)。我完成了所有这些步骤,我想我缩小到了播种操作的问题。
heroku run rake db:drop
heroku run rake db:create
heroku run rake db:migrate
heroku run rake db:setup
heroku run rake db:seed #problem
当我跑步时
heroku run rails console
并做一个User.all
种子数据创建 User_id =1 然后跳转到 User_id = 11 然后 User_id = 21。这与 Person 模型相同。这真的很奇怪,因为当我在本地运行这些命令时,我只会获得从 1 到 40 的用户 ID,并且与从 1 到 40 的 person_id 相同。我的本地数据库很好。我在视图中有逻辑,它依赖于记录以 1 比 1 而不是随机的。
它也是一个rails 4.1.8
应用程序。
更新于 2014 年 12 月 8 日
是的,我在本地和生产中都使用 mysql,这是我的 database.yml 文件
development:
adapter: mysql2
encoding: utf8
database: mini_facebook_development
pool: 5
username: root
password:
socket: /tmp/mysql.sock
staging:
adapter: mysql2
encoding: utf8
database: mini_facebook_staging
pool: 5
username: root
password:
socket: /tmp/mysql.sock
test:
adapter: mysql2
encoding: utf8
database: mini_facebook_test
pool: 5
username: root
password:
socket: /tmp/mysql.sock
并且是
gem 'mysql2', '~> 0.3.17'
我这里没有生产设置。我正在使用heroku config,并且从heroku 文档中,无论如何都会生成一个database.yml。