Я думал, что буду суммировать некоторые большие ответы, которые я имел к этому вопросу, вместе с моими собственными мыслями теперь я считал их всех:)
здесь существует две отличных проблемы:
Для (1), кажется, что установка первого пользователя из самого приложения является довольно мало дополнительной работы для функциональности, которая, по определению, почти никогда не используется. Это может быть немного более безопасно, однако, поскольку это вынуждает пользователя установить пароль их выбора. Лучшее решение является промежуточным эти два экстремальных значения: имейте сценарий (или обстреляйте задачу, или безотносительно) настраивать исходного пользователя. Сценарий может тогда быть настроен, чтобы автозаполнить с паролем по умолчанию во время разработки и потребовать, чтобы пароль был введен во время производственной установки / развертывание (если Вы хотите препятствовать паролю по умолчанию для администратора).
Для (2), кажется, что существует много хороших, допустимых решений. Задача граблей кажется хорошим путем, и существуют некоторые плагины для создания этого еще легче. Просто просмотрите некоторые из других ответов для наблюдения деталей тех:)
Попробуйте задачу граблей. Например:
namespace :bootstrap do
desc "Add the default user"
task :default_user => :environment do
User.create( :name => 'default', :password => 'password' )
end
desc "Create the default comment"
task :default_comment => :environment do
Comment.create( :title => 'Title', :body => 'First post!' )
end
desc "Run all bootstrapping tasks"
task :all => [:default_user, :default_comment]
end
Я рекомендую не вставить никакой новый данные в миграциях. Вместо этого только измените существующие данные в миграциях.
Для вставки исходных данных, я рекомендую использовать YML. В каждом проекте направляющих я устанавливаю, я создаю каталог приспособлений в соответствии с каталогом DB. Тогда я создаю файлы YML для исходных данных точно так же, как файлы YML используются для данных тестирования. Тогда я добавляю новую задачу загрузить данные из файлов YML.
lib/tasks/db.rake:
namespace :db do
desc "This loads the development data."
task :seed => :environment do
require 'active_record/fixtures'
Dir.glob(RAILS_ROOT + '/db/fixtures/*.yml').each do |file|
base_name = File.basename(file, '.*')
say "Loading #{base_name}..."
Fixtures.create_fixtures('db/fixtures', base_name)
end
end
desc "This drops the db, builds the db, and seeds the data."
task :reseed => [:environment, 'db:reset', 'db:seed']
end
db/fixtures/users.yml:
test:
customer_id: 1
name: "Test Guy"
email: "test@example.com"
hashed_password: "656fc0b1c1d1681840816c68e1640f640c6ded12"
salt: "188227600.754087929365988"
Это - мое новое любимое решение, с помощью драгоценных камней обманщика и populator:
Попробуйте семя-fu плагин, который является вполне простым плагином, который позволяет Вам отбирать данные (и изменение, которые отбирают данные в будущем), также позволит Вам отобрать среду определенные данные и данные для всех сред.
Я предполагаю, что наилучшим вариантом является номер 3, главным образом потому что тот путь, там не будет никакой пользователь по умолчанию, который является отличным способом представить в других отношениях хорошую бесполезную безопасность.
Рассмотрите использование консоли направляющих. Хороший для одноразовых задач администрирования, где это не стоит усилия настроить сценарий или миграцию.
На Вашей производственной машине:
script/console production
... тогда...
User.create(:name => "Whoever", :password => "whichever")
при генерации этого исходного пользователя несколько раз, тогда Вы могли бы также добавить сценарий в RAILS_ROOT/script / и выполнить его из командной строки на Вашей производственной машине, или через capistrano задачу.
Та задача Граблей может быть обеспечена дб - заполняют плагин:
Я сохранил бы его в миграции. В то время как рекомендуется использовать схему для начальных настроек, причина этого состоит в том, что это быстрее, таким образом избегает проблем. Единственная дополнительная миграция для данных должна быть прекрасной.
Вы могли также добавить данные в файл схемы, поскольку это - тот же формат как миграции. Вы просто потеряли бы функцию автоматической генерации.
Для пользователей и групп, вопрос существующих ранее пользователей должен быть определен относительно потребностей приложения, а не непредвиденных обстоятельств программирования. Возможно, Ваше приложение требует администратора; тогда предварительно заполните. Или возможно не - тогда добавляют код для корректного выяснения пользовательскую установку во время запуска приложения.
По более общему вопросу, ясно, что много Приложений для направляющих могут извлечь выгоду из предзаполненной даты. Например, американский адрес, содержащий приложение, может также содержать все Штаты и их сокращения. Для этих случаев миграции являются Вашим другом, я верю.