Rails 4:将迁移作为单独的DB用户运行

时间:2015-01-16 16:04:30

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

我的情况是我们正常的Rails DB用户拥有完全所有权以便运行迁移。

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

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

  • 导轨服务
  • 导轨-迁移

服务用户是应用程序处于活动状态时连接到数据库的“普通”Web应用程序用户。此DB用户只具有标准CRUD权限,但没有删除权限。

迁移者用户是仅用于运行迁移的“admin”用户。这个数据库用户可以正常“完全”访问数据库,以便在执行该命令时“可以”删除数据库。

问题:是否有一种干净的方式告诉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

0 个答案:

没有答案