Что такое db / development_structure.sql в проекте rails? - PullRequest
19 голосов
/ 13 октября 2009

В папке my / db моего приложения rails (* rails 2.3.4, ruby ​​1.8.7) есть папка development_structure.sql , и я не совсем уверен, что она делает.

  1. Нужно ли это для какой-то конкретной среды? (Кажется, я где-то читал, что он используется для тестов)
  2. Мне нужно добавить его в мой репозиторий git?

Ответы [ 4 ]

29 голосов
/ 13 июня 2011

Этот пост был использован моим коллегой в качестве ссылки, но оба ответа не являются точными или информативными.

development_structure.sql - это низкоуровневый дамп схемы, который необходим, когда вы начинаете использовать проприетарные функции базы данных - хотите вы этого или нет, вы собираетесь использовать их в какой-то момент.

Относительно вопроса о том, хранить его или нет, есть некоторые споры. Вот информационный пост: http://www.saturnflyer.com/blog/jim/2010/09/14/always-check-in-schema-rb/. И мой взгляд на это следует.

Задача development_structure.sql - синхронизировать, для любого данного коммита, структуру базы данных с кодом, не имея предварительного знания структуры схемы, то есть не полагаясь на ранее существовавшее состояние схема для получения новой.

В двух словах, имея доступную структуру схемы, каждый раз, когда вы меняете ветку / коммит, вы загружаете ее напрямую и забываете об этом. Это в основном справедливо для динамических и «переполненных» проектов, где разные ветви имеют различия в базовой структуре схемы.

Без сохранения структуры схемы вам необходимо будет всегда использовать существующую эталонную схему в вашей базе данных и переносить ее назад или вперед каждый раз, когда вы изменяете ветвь / фиксацию; несколько реальных случаев могут сделать этот процесс неэффективным (например, когда в другой ветви нет миграций, которые у вас есть в данный момент, или некоторые миграции не могут быть отменены).

Другая проблема - это автоматические сборки, которые страдают от тех же проблем, и, что еще хуже, они не могут применять ручные изменения.

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

Я не говорю, что вы не можете жить без development_structure.sql - конечно, вы можете. Но если он у вас есть, то при смене ветки / коммита вы просто загружаете и забываете; если вы этого не сделаете, вам, возможно, придется пройти серию ручных шагов.

22 голосов
/ 13 октября 2009

Вы не должны добавлять его в свой репозиторий git.

Это файл, который автоматически создается rails при запуске миграции с вашим database.yml, настроенным для соединения с базой данных mysql. Вы можете просмотреть его как альтернативу schema.rb

Я полагаю, что вы можете заставить rails создать его, добавив в свою среду. Rb:

config.active_record.schema_format = :sql

При наличии этот файл используется, например:

rake db:test:clone_structure

Редактировать

Соответствующий раздел в Ruby On Rails Guides. http://guides.rubyonrails.org/migrations.html#schema-dumping-and-you

Они рекомендуют включить его в систему контроля версий в вики.

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

Однако в наше время это похоже на личный вкус. Следуйте своим инстинктам в этом.

1 голос
/ 13 октября 2009

Он создается, когда вы запускаете задачу rake, чтобы клонировать базу данных разработки в тестовую базу данных. База данных разработки выводится на SQL, который затем считывается в вашу тестовую базу данных. Вы можете безопасно удалить его.

0 голосов
/ 19 октября 2012

В рельсах 3 вам даже не нужно писать эту строку,

config.active_record.schema_format =: sql

Вы можете сгенерировать этот файл Structure.sql, просто выполнив вышеупомянутую команду rake, упомянутую выше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...