2016-12-11 4 views
3

Я интегрирую вход в Facebook для своего приложения. У меня есть модель под названием «Пользователь», и она должна иметь два столбца: «поставщик» и «uid». Все хорошо в разработке, но я только заметил, что на производстве «Пользователь» не имеет ни столбца. Я попытался перепроверить мою базу данных на моем сервере, но это не помогло.Можно ли добавлять или удалять столбцы без файла миграции?

Итак, я проверил свой код в реальном времени, а «провайдер» и «uid» оба перечислены в моем schema.db, но они не упоминаются ни в одном из моих файлов миграции, на производстве или разработке. В любом из моих коммитов нет никаких записей о любом таком файле миграции. Каким-то образом они, очевидно, были добавлены в мою схему без каких-либо файлов миграции. Возможно ли это? Я имею в виду, если бы я написал файл миграции и просто случайно удалил его позже, я думаю, что он все равно будет отображаться в моих коммитах, не так ли? Это было так давно, я не помню, что я сделал.

Но в любом случае, вот моя проблема: я не могу написать файл миграции, добавляющий столбцы, потому что это вызовет конфликты при разработке, и я не могу записать файл миграции, удалив их, а затем добавлю их еще один файл, потому что то на производстве сервер будет пытаться удалить столбцы, которые не существуют в первую очередь. Можно ли добавлять или удалять столбцы, не записывая никаких файлов миграции? Или я должен написать один, чтобы удалить их, перенести его на разработку, удалить, написать еще один, добавив их, а затем перенести это на разработку и на производство?

Поскольку столбцы находятся в моей schema.db, но не в моей фактической базе данных, я думаю, что реальный вопрос в том, что миграция редактирует схему? Потому что, если это так, то я думаю, что я мог бы запустить вниз миграции, а затем вверх миграции на развитие и производство.

+0

Вас интересуют данные в этих столбцах в вашей среде разработки? Вы можете просто удалить их вручную, добавить отсутствующую миграцию, чтобы добавить их, и запустить эту миграцию повсюду. BTW, 'schema.rb' основывается на текущем состоянии вашей базы данных, которое может или не может иметь ничего общего с вашими миграциями. –

+0

Как называется таблица, в которой находятся поставщик и uid? Похоже, что «uid» сокращен для «user_id», который используется в ассоциации с таблицей: users, потому что идентификатор пользователя будет просто простым идентификатором в таблице пользователей. Может быть, вы можете показать нам схему? –

+0

@muistooshort Как я могу удалить столбец вручную? Нет, мне не нужны данные. –

ответ

1

Если бы я был вами, я бы выполнил следующие быстрые исправления, хотя это не так уж хорошо, но в случае беспорядочных миграций я это делаю.

Напишите миграцию, которая добавляет столбцов: provider & uid. Не выполняйте миграцию на своем локальном компьютере, и ее запуск не имеет смысла. Зафиксируйте свой код, разверните его для производства и выполните миграцию. Позже удалите миграцию, нажмите код для производства. Удаление файла миграции не отменяет изменения: он не удалит два из этих столбцов.

Gotcha: Таким образом, вы можете внести изменения в свои изменения, но как насчет разработчика. Миграции - это способ помочь поддерживать схему для каждого разработчика и для каждой среды.

Хороший способ сделать это: Вы можете запустить rake db:migrate:status список вниз все миграции когда-либо написанных, но не удаляются, и вы можете видеть, как многие из них были up'ed, и сколько из них были down'ed. Может быть, миграция для добавления столбцов была написана в прошлом, но она была в вашей локальной среде, но вы не на производстве.

Помните, что если когда вы делаете rake db:migrate:status, он также будет список вниз номер версии, связанный с каждой миграцией, так и в случае, если вы хотели бы вниз один миграцию, вы можете сделать следующее:

rake db:migrate:down VERSION=(version_number) 

И выполнение rake db:migrate приведет к любой миграции, которая была в прошлом.

+0

Должен ли я это делать, даже если «мой поставщик» и «uid» в настоящее время находятся в моем производстве schema.rb? Это не вызовет конфликта? –

+0

Итак, вы в основном говорите что 'provider' &' uid' существуют в схеме по производству, но на самом деле не существуют на производстве? –

+0

Справа. Я думал, что это тоже странно. Когда я набираю «Пользователь» в консоли rails, я возвращаю список всех его столбцов, но ни «поставщик», ни «uid» не включены. Но они перечислены в live schema.rb. –