Как (и ли) для заполнения приложения направляющих с исходными данными

61
задан Community 23 May 2017 в 10:29
поделиться

10 ответов

Я думал, что буду суммировать некоторые большие ответы, которые я имел к этому вопросу, вместе с моими собственными мыслями теперь я считал их всех:)

здесь существует две отличных проблемы:

  1. я должен предварительно заполнить базу данных со своим специальным 'администраторским' пользователем? Или приложение должно позволить настраивать, когда оно сначала используется?
  2. , Как каждый предварительно заполняет базу данных с данными? Обратите внимание, что это - допустимый вопрос независимо от ответа на часть 1: существуют другие сценарии использования для предварительного населения, чем администраторский пользователь.

Для (1), кажется, что установка первого пользователя из самого приложения является довольно мало дополнительной работы для функциональности, которая, по определению, почти никогда не используется. Это может быть немного более безопасно, однако, поскольку это вынуждает пользователя установить пароль их выбора. Лучшее решение является промежуточным эти два экстремальных значения: имейте сценарий (или обстреляйте задачу, или безотносительно) настраивать исходного пользователя. Сценарий может тогда быть настроен, чтобы автозаполнить с паролем по умолчанию во время разработки и потребовать, чтобы пароль был введен во время производственной установки / развертывание (если Вы хотите препятствовать паролю по умолчанию для администратора).

Для (2), кажется, что существует много хороших, допустимых решений. Задача граблей кажется хорошим путем, и существуют некоторые плагины для создания этого еще легче. Просто просмотрите некоторые из других ответов для наблюдения деталей тех:)

4
ответ дан Luke Halliwell 24 November 2019 в 17:07
поделиться

Попробуйте задачу граблей. Например:

  1. Создает файл /lib/tasks/bootstrap.rake
  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
  1. Затем при установке приложения впервые Вы можете сделать грабли db:migrate ИЛИ обстрелять db:schema:load, и затем обстреливаете bootstrap:all.
46
ответ дан Aaron Wheeler 24 November 2019 в 17:07
поделиться

Я рекомендую не вставить никакой новый данные в миграциях. Вместо этого только измените существующие данные в миграциях.

Для вставки исходных данных, я рекомендую использовать 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"
32
ответ дан Jay Stramel 24 November 2019 в 17:07
поделиться

Это - мое новое любимое решение, с помощью драгоценных камней обманщика и populator:

http://railscasts.com/episodes/126-populating-a-database

9
ответ дан 24 November 2019 в 17:07
поделиться

Попробуйте семя-fu плагин, который является вполне простым плагином, который позволяет Вам отбирать данные (и изменение, которые отбирают данные в будущем), также позволит Вам отобрать среду определенные данные и данные для всех сред.

6
ответ дан DEfusion 24 November 2019 в 17:07
поделиться

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

4
ответ дан Vinko Vrsalovic 24 November 2019 в 17:07
поделиться

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

На Вашей производственной машине:

script/console production

... тогда...

User.create(:name => "Whoever", :password => "whichever")

при генерации этого исходного пользователя несколько раз, тогда Вы могли бы также добавить сценарий в RAILS_ROOT/script / и выполнить его из командной строки на Вашей производственной машине, или через capistrano задачу.

3
ответ дан Trevor Stow 24 November 2019 в 17:07
поделиться

Та задача Граблей может быть обеспечена дб - заполняют плагин:

http://github.com/joshknowles/db-populate/tree/master

3
ответ дан pantulis 24 November 2019 в 17:07
поделиться

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

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

2
ответ дан MattW. 24 November 2019 в 17:07
поделиться

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

По более общему вопросу, ясно, что много Приложений для направляющих могут извлечь выгоду из предзаполненной даты. Например, американский адрес, содержащий приложение, может также содержать все Штаты и их сокращения. Для этих случаев миграции являются Вашим другом, я верю.

2
ответ дан NickR 24 November 2019 в 17:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: