问题
I have a problem with pushing my migrations to the production database.
The issue:
- I've altered database schema by adding 1 column.
- I've migrated it to the production database: - MacBook-Air-Mac:app msc$ rake db:migrate RAILS_ENV="production" [RailsAdmin] RailsAdmin initialization disabled by default. Pass SKIP_RAILS_ADMIN_INITIALIZER=false if you need it. == AddLengthColumnToBooks: migrating ========================================= -- add_column(:books, :length, :integer) -> 0.0017s == AddLengthColumnToBooks: migrated (0.0019s) ================================ 
- Thinking that the new DB schema is now in production, I've deployed the code which does some things with - :length.
- In production, I got the following error: - undefined method `length=' for # 
- I did - heroku rollbackand downgraded the app to the latest reliable version.
- THEN (a bit too late probably) I found out that I have to - heroku restartthe app to load the new indexes. I did this several times.
- I opened the console then and checked - Book.column_names, but there was no- length
- I did - heroku run rake db:migratefollowed by- heroku restartone more time, no change.
- I've tried migrating another column to the production db, but didn't get any message at all, not even the one from p.2. 
What am I doing wrong here?
Update
Based on the answers of Philipe, I did a number of additional steps:
- git add db/schema.rb,- git add db/migrate/20130325103953_add_length_column_to_books.rband 'git add db/migrate/20130401041910_add_duration_column_to_books.rb'. Git's answer was:
- Changes to be committed: (use "git reset HEAD ..." to unstage) - new file: db/migrate/20130325103953_add_length_column_to_books.rb new file: db/migrate/20130401041910_add_duration_column_to_books.rb modified: db/schema.rb 
- Then I did - git commit -m "Updating the schema".
- Again the output was: - 3 files changed, 168 insertions(+), 156 deletions(-)- create mode 100644 db/migrate/20130325103953_add_length_column_to_books.rb create mode 100644 db/migrate/20130401041910_add_duration_column_to_books.rb 
- Then I run - heroku run rake db:migrate. Unfortunately there was no sign of migrations, simply got:- Running - rake db:migrateattached to terminal... up, run.5428 and that's it.
- In the production Rails Console, running - Book.column_namesstill lacks both length and duration.
Now I'm even more out of ideas. `
回答1:
It doesn't look like you are pushing changes to Heroku. Steps should be as follows;
- Make changes to local code
- Run any migrations LOCALLY
- Add all changed files to Git git add .
- Commit all added files to git git commit -m "Adding features"
- Push the changes to Heroku git push heroku master- assuming you are usingherokuas your remote name and you are working in themasterbranch
- If you have migrations run heroku run rake db:migrateto run the migrations ON HEROKU
- Following migrations do heroku restart
That should be all you need to get you working.
回答2:
I had the same problem; I git added the migrations, git pushed them to the server, cap deployed them, and the database didn't change. Logged in to the server directly, ran rake db:migrate, and the command line seemed to run the migration, but nothing changed.
In my case, somehow rake db:migrate was using the wrong RAILS_ENV. I logged in to the server, and ran
rake db:migrate RAILS_ENV=production
This caused the database to create the new columns, and then all of the code that I had debugged in the test database started working on the server.
回答3:
I just had same problem. After adding a column to my DB locally, I did heroku run rake db:migrate -app [my app name]. Running my code on production, I got ActiveRecord::UnknownAttributeError (unknown attribute '_____' for [table name].)
This solved my problem:
heroku restart --app [my app name]
回答4:
My two cents based on my experience: I thought that heroku run db:migrate also migrated db content into production. No! Only structure. So in my case, log in was not working in production because there were no users in it. I had to sign test user up again and then it worked. Hope it helps rookies like me out there
来源:https://stackoverflow.com/questions/15737800/heroku-run-rake-dbmigrate-results-in-no-change-in-the-database-app-restarted-s