Rails: создать пользователя root по умолчанию посредством миграции? Загребать задачу?

Я тестирую свое приложение на Heroku (что, черт возьми, потрясающе!), И я понял, что у меня нет возможности создать моего root пользователя.

Я использую Authlogic и rails_authorization_plugin.

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

Любое понимание будет оценено!


person neezer    schedule 13.10.2009    source источник
comment
Вот аналогичный вопрос: stackoverflow.com/questions/62201/   -  person hgmnz    schedule 14.10.2009


Ответы (2)


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

class AddRootUser < ActiveRecord::Migration
  def self.up
    user = User.create!( :email => '...', :login => 'root', :password => '...' )
  end

  def self.down
    user = User.find_by_login( 'root' )
    user.destroy
  end
end

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

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

person Emily    schedule 13.10.2009
comment
Отлично, спасибо! Оказывается, Authlogic выполняет все зашифрованные пароли бессистемно, когда сохраняет запись, так что мне не нужно делать ничего особенного. Впоследствии простой вызов user.has_role 'root' назначает пользователя root. RoR отличный! - person neezer; 14.10.2009

Вы можете настроить задачу rake для начальной загрузки пользователя (и любых других начальных данных). На самом деле Heroku позволяет запускать задачи с граблями: http://docs.heroku.com/rake

Или, как раз, вы можете создать пользователя локально и загрузить свою базу данных в heroku, используя heroku db:push. Документы здесь: http://docs.heroku.com/taps#import-push-to-heroku

Кроме того, я предлагаю отказаться от миграции только данных. В ядре Rails есть даже задача сбора начальных данных. См. railscast и этот пост.

person hgmnz    schedule 13.10.2009