2014-09-08 3 views
0

В настоящее время я пытаюсь написать задачу рейка, которая сбрасывает мою базу данных при копировании админов (определенного типа пользователя-разработчика) на новый сервер.Копировать создайте пользователей после db: reset

task :safe_reset => :environment do 
     desc "Resets db while persisting admins." 
     user_collection = [] 
     User.all.each do |user| 
       if user.admin? 
         user_collection << user.attributes 
       end 
     end 
     Rake::Task['db:reset'].invoke 
     user_collection.each do |user| 
       User.create!(user) 
     end 
end 

Однако информация о пароле не является общедоступным атрибутом пользователя. Поэтому у меня недостаточно информации для создания нового пользователя.

Есть ли способ получить информацию о пароле, или, желательно, есть способ сделать это, избегая при этом сокращения каждого администратора до хэш-объекта?

ответ

1

Вы не можете получить исходную информацию о пароле. Но вы можете получить зашифрованный пароль ...

Заменить

user_collection.each do |user| 
      User.create!(user) 
    end 

К этому

user_collection.each do |user| 
    encrypted_password = user.delete('encrypted_password') 
    u = User.create!(user.merge({ 
    :password => "Foobar", 
    :password_confirmation => "Foobar" 
    }) 
    u.update_attribute(:encrypted_password, encrypted_password) 
end 
1

Этого не должно быть сделано. Обычно приложение «посеяно» (в db/seeds.rb) с одной учетной записью администратора. После запуска приложения разработчик использует эту учетную запись для распространения других необходимых учетных записей и изменения ее данных на нечто, отличное от значений по умолчанию. Я не вижу каких-либо преимуществ или преимуществ для сохранения одной таблицы, такой как db: сброс обычно никогда не используется в производстве или постановке и часто используется в разработке. В разработке мы используем наши семенные данные для создания учетных записей для нас.

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

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