db:reset后复制设计用户

时间:2014-09-08 13:29:27

标签: ruby-on-rails ruby devise rake

我目前正在尝试编写一个rake任务,在将管理员(特定类型的设备用户)复制到新服务器时重置我的数据库。

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

但是,密码信息不是用户的公共属性。所以我没有足够的信息来创建一个新用户。

有没有办法获取密码信息,或者最好是否有办法实现这一点,同时避免将每个管理员减少到哈希对象?

2 个答案:

答案 0 :(得分:1)

不应该这样做。通常情况下,应用程序是播种的#39; (在db / seeds.rb中)具有一个管理用户帐户。应用程序上线后,开发人员使用该帐户传播其他必要的帐户,并将其详细信息更改为默认值以外的其他帐户。我没有看到像这样持久保存这样一个表的任何优点或好处db:reset通常从不用于生产或登台,并且经常用于开发。在开发过程中,我们使用种子数据为我们生成帐户。

可以这样做,具体取决于你的身份验证解决方案,但我强烈建议不要这样做,除非它有一个很好的用例。

答案 1 :(得分: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