I have a simple rails app hosted on heroku using their cleardb mysql add on. I was developing on mysql locally. I am having problem with seeding data on production db on heroku.
my seed data looks like this in db/seeds.rb. The app is using faker and fabrication gems. I have a user model and a person model.
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: "[email protected]", friend_test: 0, image: File.open("app/assets/images/puppy.jpg"), user_id: 1)
Person.create(full_name: "George Washington", email: "[email protected]", friend_test: 0, image: File.open("app/assets/images/puppy.jpg"), user_id: 1)
Person.create(full_name: "John Adam", email: "[email protected]", friend_test: 0, image: File.open("app/assets/images/puppy.jpg"), user_id: 1)
Person.create(full_name: "Barack Obama", email: "[email protected]", friend_test: 0, image: File.open("app/assets/images/puppy.jpg"), user_id: 2)
Person.create(full_name: "John Kennedy", email: "[email protected]", friend_test: 0, image: File.open("app/assets/images/puppy.jpg"), user_id: 2)
Person.create(full_name: "Andrew Jackson", email: "[email protected]", friend_test: 0, image: File.open("app/assets/images/puppy.jpg"), user_id: 2)
Person.create(full_name: "Jimmy Carter", email: "[email protected]", friend_test: 0, image: File.open("app/assets/images/puppy.jpg"), user_id: 3)
Person.create(full_name: "Gerald Ford", email: "[email protected]", friend_test: 0, image: File.open("app/assets/images/puppy.jpg"), user_id: 3)
Person.create(full_name: "Richard Nixon", email: "[email protected]", friend_test: 0, image: File.open("app/assets/images/puppy.jpg"), user_id: 3)
Initially I thought it didn't seed correctly because I was not clearing the db correctly (since heroku don't play well with mysql) . I ran through all of these steps and I think I narrow down to the problem with the seeding action instead.
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
when I run
heroku run rails console
and do a User.all
the seed data created User_id =1 then jump to User_id = 11 and then User_id = 21. This is the same with the Person model. This is really odd since locally when I run those commands locally I would just get user id from 1 to 40 and same with person_id from 1 to 40. My local db is fine. I have logic in the view that depends on the records to go 1 by 1 and not randomly.
also its a rails 4.1.8
app.
Updated as of Dec 8 2014
Yes I am using mysql both locally and in production, here is my database.yml file
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
and is
gem 'mysql2', '~> 0.3.17'
I don't have production set here. I am using heroku config and from heroku docs, there will be a database.yml generated anyway.