Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 Rails 4:作为单独的DB用户运行迁移_Ruby On Rails 4_Privileges_Rails Migrations - Fatal编程技术网

Ruby on rails 4 Rails 4:作为单独的DB用户运行迁移

Ruby on rails 4 Rails 4:作为单独的DB用户运行迁移,ruby-on-rails-4,privileges,rails-migrations,Ruby On Rails 4,Privileges,Rails Migrations,我遇到的情况是,为了运行迁移,我们的普通Rails DB用户拥有完全的所有权 但是,我们使用共享数据库进行开发,因此我们不能对开发数据库运行“破坏性”数据库任务,例如rake DB:drop/reset/etc. 我的想法是创建2个DB用户: 铁路服务 rails迁移器 服务用户是“普通”web应用程序用户,在应用程序处于活动状态时连接到DB。此DB用户只具有标准CRUD权限,但没有删除权限 migrator用户是仅用于运行迁移的“管理员”用户。此DB用户将具有对DB的正常“完全”访问权限,

我遇到的情况是,为了运行迁移,我们的普通Rails DB用户拥有完全的所有权

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

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

  • 铁路服务
  • rails迁移器
服务用户是“普通”web应用程序用户,在应用程序处于活动状态时连接到DB。此DB用户只具有标准CRUD权限,但没有删除权限

migrator用户是仅用于运行迁移的“管理员”用户。此DB用户将具有对DB的正常“完全”访问权限,以便在执行该命令时“可以”删除DB

问题:是否有一种干净的方法告诉Rails迁移以
Rails迁移器用户的身份运行?除了以某种方式改变每个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

请大家参考2007年马修·鲁迪·雅各布斯(Matthew Rudy Jacobs)的答案(!) 幸运的是,它现在也能工作:)

我刚刚将
DEFINED?
和其余部分更改为
ENV['AS\u DB\u ADMIN']
,并使用它来分离对另一个用户的迁移访问

关于我使用的迁移
set:default\u env,{as\u db\u admin:true}