предварительное заполнение пользователя-администратора в базе данных с помощью плагина authlogic rails - PullRequest
4 голосов
/ 13 октября 2009

Я использую плагин Authlogic rails. На самом деле все, для чего я его использую - это иметь одного администратора, который может редактировать сайт. Это не сайт, где люди регистрируют аккаунты. Я собираюсь в конечном итоге сделать метод создания пользователя ограниченным для уже вошедшего в систему пользователя, но, конечно, когда я очищаю БД, я не могу создать пользователя, поэтому мне нужно как-то его предварительно заполнить. Я попытался просто выполнить миграцию, чтобы создать дамп созданного мной пользователя, но это не работает и выглядит довольно странно. Какой лучший способ справиться с этим? Это сложно, так как пароли хешируются, поэтому я чувствую, что должен создать их, а затем извлечь хешированные записи ...

Ответы [ 4 ]

7 голосов
/ 14 октября 2009

Rails 2.3.4 добавляет новую функцию в начальные базы данных.

Вы можете добавить в свой seed файл db / seed.rb:

User.create(:username => "admin", :password => "notthis", :password_confirmation => "notthis", :email => "admin@example.com")

Затем вставьте его с:

rake db:seed

для производства или испытания

RAILS_ENV="production" rake db:seed  
RAILS_ENV="test" rake db:seed

Моя любимая функция в 2.3.4 до сих пор

6 голосов
/ 14 октября 2009

Если вы используете> = Rails 2.3.4, новые функции включают в себя файл db / seed.rb. Теперь это файл по умолчанию для данных заполнения.

Здесь вы можете просто использовать ваши модели, такие как User.create(:login=>"admin", :etc => :etc), для создания ваших данных.

При таком подходе rake db:setup также будет заполнять данные, как rake db:seed, если у вас уже есть БД.

В старых проектах я иногда использовал приспособление (запомни, чтобы сменить пароль сразу) с чем-то вроде users.yml:

admin:
  id: 1
  email: admin@domain.com
  login: admin
  crypted_password: a4a4e4809f0a285e76bb6b35f97c9323e912adca
  salt: 7e8455432de1ab5f3fE0e724b1e71500a29ab5ca
  created_at: <%= Time.now.to_s :db %>
  updated_at: <%= Time.now.to_s :db %>

rake db:fixtures:load FIXTURES=users

Или, наконец, как и другие парни сказали, что у вас есть опция рейка, надеюсь, это поможет.

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

Добавить грабли:

  # Add whatever fields you validate in user model
  # for me only username and password
  desc  'Add Admin: rake add_admin username=some_admin password=some_pass'
  task :add_admin => :environment do
    User.create!(:username=> ENV["username"], :password=> ENV["password"],:password_confirmation => ENV["password"])
  end
0 голосов
/ 13 октября 2009

Наиболее часто используемый подход состоит в том, чтобы иметь задачу rake, которая запускается после развертывания на хост с пустой базой данных.

...