2012-12-04 2 views
0

establish_connection을 사용하여 레일스의 별도 DB로 마이 그 레이션을 시도하고 있습니다. 이제레일스가 DB 분리 작업을 수행하지 못합니다.

class User < ActiveRecord::Base 
    establish_connection "user_#{Rails.env}" 
    [...] 
end 

:이 같은 사용자 모델을 정의한 또한

user_development: 
    adapter: postgresql 
    encoding: unicode 
    database: MyApp_user_development 
    pool: 5 
    host: localhost 
    username: xxx 
    password: xxx 

:이 설정을

def change 
    ActiveRecord::Base.establish_connection("user_#{Rails.env}") 
    ActiveRecord::Base.initialize_schema_migrations_table 

    create_table "users", :force => true do |t| 
    t.string "email", 
end 

YML에서 : 나는 마이그레이션 파일이 같은 뭔가를 , DB가 존재하지만 rake db:migrate을 실행하면이 오류가 발생합니다 :

== CreateUserOnSeparateDb: migrating ========================================= 
rake aborted! 
An error has occurred, this and all later migrations canceled: 

connection is closed 

어떤 일이 일어나고 있는지 아는 사람이 있습니까?

또한 establish_connection 호출을 마이그레이션 파일의 connection 메서드로 이동하려고 시도했습니다. 이 경우 테이블은 마이그레이션시 만들어 지지만 다른 오류가 발생하는 것과 같은 오류가 발생하고 schema_migrations 테이블이 생성되지 않습니다.

도움이 필요하십니까?

답변

1


아래의 단계에 따라 해결되었습니다.

 
class AddCustomTbl < ActiveRecord::Migration
def connection ActiveRecord::Base.establish_connection(Rails.env).connection end def up # Connection with user_#{Rails.env} oldEnv = Rails.env Rails.env = "user_#{Rails.env}" ActiveRecord::Base.establish_connection(Rails.env) create_table "users", :force => true do |t| t.string "email" end # Connection with Rails.env Rails.env = oldEnv ActiveRecord::Base.establish_connection ActiveRecord::Base.configurations[Rails.env] end def down # Connection with user_#{Rails.env} oldEnv = Rails.env Rails.env = "user_#{Rails.env}" ActiveRecord::Base.establish_connection(Rails.env).connection drop_table :users # Connection with Rails.env Rails.env = oldEnv ActiveRecord::Base.establish_connection ActiveRecord::Base.configurations[Rails.env] end end
관련 문제