2011-10-14 4 views
2

У меня есть следующий сценарий:Rails: Лучшая практика для обработки данных развития

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

В качестве примера скажем, что у меня есть задачи, которые необходимо классифицировать. Я начал работу над задачами, но мне нужно, чтобы некоторые категории были загружены на моем db уже.

Я работаю с Rails 3.1 btw.

Заранее благодарен!

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

О семенах: Мне сказали, что семена не путь, если ваши данные могут немного отличаться, так как вы должны удалить всю информацию и вставьте ее снова. Скажите .. Я хочу изменить или добавить категории, тогда мне придется редактировать файл seeds.rb, выполнять мои модификации, а затем удалять и перезагружать все данные ..., есть ли другой способ? Или семена - лучший способ решить эту проблему?

+0

Конечно :) В каких семенах вы видите, что вы можете создать все допустимые, созданные действительно в рубиновом файле, а затем запустить сам файл, например. new_categories.rb. Вы можете сделать задачу рейка, чтобы сделать это тоже. –

+1

Я бы использовал только семена для данных, которые должны быть в приложении для его работы на производстве. Возможно, вам лучше использовать приборы для разработки/тестовых данных: http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures – Brian

ответ

2

Так это звучит например, вы, возможно, будете добавлять, изменять или удалять данные по пути, который будет перемешаться среди других данных. Итак, seeds.rb отсутствует. Что вам нужно использовать, это миграции. Таким образом, вы можете искать и идентифицировать данные, которые хотите изменить, посредством последовательного процесса, для которого миграция предназначена именно для этого. В противном случае я считаю, что лучше всего изменить данные вручную через консоль рельсов.

EDIT: Хорошим примером может быть следующее.

Вы используете Capistrano для обработки вашего развертывания. Вы хотите добавить новую категорию, игрушки в свою систему. В файле миграции вы добавите Category.create(:name => "Toys") или что-то подобное в своей функции миграции (я забыл, что они теперь называют это в Rails 3.1, я знаю, что есть только один метод), запустите rake db:migrate локально, проверьте свои изменения, зафиксируйте их, затем если допустимо развернуть его, используя cap:deploy, и это приведет к новой миграции с вашей производственной базой данных, добавит новую категорию и сделает ее доступной для использования в развернутом приложении.

Этот пример в стороне, это действительно зависит от вашего рабочего процесса. Если вы считаете, что добавление новых данных через миграцию не приведет к шлейфу вашего приложения, перейдите к нему. Я скажу, что DHH (David Heinemeier Hansson) не является поклонником этого, так как он использует его строго для изменения структуры базы данных с течением времени. Если вы не знали, что DHH является создателем Rails.

EDIT 2: Одна мысль, которую я только что имел, что позволило бы вам пропустить понятие использования миграций, если вам было неудобно. Вы можете на 100% полагаться на свой файл db/seeds.rb. Когда вы думаете о «seeds.rb», вы думаете о создании информации, но это не обязательно должно быть так. Вместо того, чтобы просто слепо создавать данные, вы можете проверить, действительно ли соответствующие данные уже существуют, и если это произойдет, то измените и сохраните его, но если он не существует, просто создайте новую запись простой и простой.

дб/seeds.rb

toys = Category.find_by_name("Toys") 
if toys then 
    toys.name = "More Toys" 
    toys.save 
else 
    Category.create(:name => "More Toys") 
end 

Run rake db:seeds и этот код будет работать. Вам просто нужно постоянно обновлять файл seeds.rb каждый раз, когда вы меняете свои данные, чтобы 1) он искал правильное значение данных и 2) он обновлял правильные атрибуты.

В конце концов, нет правильного или неправильного способа сделать это, это все, что работает для вас и вашего рабочего процесса.

+0

Mh, интересно .. Я думал, что миграция предназначена для управления структурой вашей базы данных, а не ее содержанием. Не могли бы вы привести пример или ссылку для этого? – Deleteman

+0

Я видел это в эпизоде ​​RailsCasts однажды, у меня возникли проблемы с запоминанием того, какой из них. Независимо от того, что делает Райан Бейтс, для меня это чистое золото. Я посмотрю, смогу ли я его найти. –

+0

Я обновил свой ответ, чтобы дать вам пример и дополнительную альтернативу с использованием seeds.rb. –

0

Место для загрузки данных разработки: db/seeds.rb. Так как вы можете написать произвольный Ruby-код там, вы даже можете загружать ваши данные из внешних файлов, например.

+0

Спасибо за ваш быстрый ответ, см. Мое редактирование, пожалуйста. – Deleteman

0

есть файл с именем дб/seeds.rb

вы можете создать экземпляр записи, используя его

user1=User.create(:email=>"[email protected]", 
    :first_name=>"user", 
    :last_name=>"name", 
    :bio=>"User bio...", 
    :website=>"http://www.website.com", 
    :occupation=>"WebDeveloper", 
    :password=>"changeme", 
    :password_confirmation=>"changeme", 
    :avatar => File.open(File.join(Rails.root, '/app/assets/images/profiles/image.png')) 
) 
user2=User.create(:email=>"[email protected]", 
    :first_name=>"user2", 
    :last_name=>"name2", 
    :bio=>"User2 bio...", 
    :website=>"http://www.website.com", 
    :occupation=>"WebDeveloper", 
    :password=>"changeme", 
    :password_confirmation=>"changeme", 
    :avatar => File.open(File.join(Rails.root, '/app/assets/images/profiles/image.png')) 
) 

Просто запустите rake db:seed из командной строки, чтобы получить его в БД

+0

Спасибо за ваш быстрый ответ, см. Мое редактирование, пожалуйста. – Deleteman

Смежные вопросы