【问题标题】:Rails 4: run migrations as separate DB userRails 4:以单独的数据库用户身份运行迁移
【发布时间】:2015-01-16 16:04:29
【问题描述】:

我的情况是我们的普通 Rails DB 用户拥有完全所有权才能运行迁移。

但是,我们使用共享数据库进行开发,因此我们不能对开发数据库运行“破坏性”数据库任务,例如rake db:drop/reset/etc...

我的想法是创建 2 个 DB 用户:

  • rails 服务
  • rails 迁移器

服务用户是应用上线时连接到数据库的“普通”网络应用用户。这个 DB 用户只有标准的 CRUD 权限,但没有删除权限。

迁移者用户是仅用于运行迁移的“管理员”用户。该数据库用户将拥有对数据库的正常“完全”访问权限,因此如果执行该命令,它“可以”删除数据库。

问题:有没有一种简洁的方法可以让 Rails 迁移以 rails-migrator 用户身份运行?除了以某种方式更改每个 rails 迁移文件的连接字符串之外,我不确定如何完成此操作,这似乎是个坏主意。

结合上述内容,我将“删除”破坏性 rake 任务,以便开发人员甚至无法运行它们。

# lib/tasks/db.rake
# See: https://coderwall.com/p/jt4e1q/disable-destructive-rake-tasks-by-environment
tasks = Rake.application.instance_variable_get '@tasks'
tasks.delete 'db:reset'
tasks.delete 'db:drop'
namespace :db do
  desc 'db:reset not available in this environment'
  task :reset do
    puts 'db:reset has been disabled'
  end
  desc 'db:drop not available in this environment'
  task :drop do
    puts 'db:drop has been disabled'
  end
end

【问题讨论】:

    标签: ruby-on-rails-4 privileges rails-migrations


    【解决方案1】:

    请参考 2007 年 Matthew Rudy Jacobs 的回答(!)https://www.ruby-forum.com/topic/123618 幸运的是,它现在也可以使用 :)

    我刚刚将DEFINED? 和其余的更改为ENV['AS_DB_ADMIN'] 并用它来将迁移访问权分离给另一个用户。

    我在迁移时使用 set :default_env, { as_db_admin: true }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-29
      • 1970-01-01
      • 1970-01-01
      • 2011-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多