2015-01-16 6 views
2

일반적인 레일 DB 사용자는 마이 그 레이션을 실행하기 위해 완전한 소유권을 가지고 있습니다.레일 4 : 별도의 DB 사용자로 마이그레이션 실행

그러나 공유 DB를 개발 용으로 사용하므로 개발 DB에 대해 "파괴적인"DB 작업 (예 : rake db:drop/reset/etc...)을 실행할 수 없습니다.

내 생각은이 DB 사용자를 작성하는 것입니다 :

  • 레일 서비스
  • 레일 - Migrator를을

서비스 사용자가 DB에 연결 "정상적인"웹 응용 프로그램의 사용자입니다 앱이 실행될 때 이 DB 사용자는 표준 CRUD 권한 만 가질 수 있지만 삭제 권한은 없습니다.

migrator 사용자는 마이그레이션 실행에만 사용되는 "admin"사용자입니다. 이 DB 사용자는 DB에 대한 일반적인 "전체"액세스 권한을 가지므로 해당 명령이 실행되면 DB를 "삭제"할 수 있습니다.

질문 : 레일스 마이그레이션을 rails-migrator 사용자로 실행하도록 알리는 확실한 방법이 있습니까? 나는 어떻게 든 나쁜 생각처럼 보이는 모든 레일 마이그레이션 파일에 대한 연결 문자열을 어떻게해서든지 변경함으로써 이것을 어떻게 수행 할 것인지 확신 할 수 없다.

위의 설명과 같이 파괴적인 레이크 작업을 "삭제"하여 개발자가 실행할 수 없도록 할 것입니다.

# 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

나는 https://www.ruby-forum.com/topic/123618 럭키 충분히는 이제 작동합니다 :)

난 그냥 DEFINED?ENV['AS_DB_ADMIN']에 나머지를 변경 (!) 2007 마태 복음 루디 제이콥스의 대답에 당신을 참조하고 분리하는 데 사용 다른 사용자로의 이전 액세스.

이동시 사용 전 set :default_env, { as_db_admin: true }