2009-05-21 3 views
1

내 응용 프로그램과 개발 중에 하나의 모델에 대해 별도의 DB가 있습니다. 모드에서는 연결이 제대로 작동하지만 생산되지는 않습니다.생산에서 DB 연결 문제가 발생했습니다.

production: 
    adapter: mysql 
    host: myhost 
    username: root 
    password: 
    database: production_db 

users_production: 
    adapter: mysql 
    host: myhost 
    username: root 
    password: 
    database: other_db 

다른 데이터베이스에 연결이 모델은 사용자라고하지만 other_db에서 참조하는 표 smf_users 그래서 내 User.rb이 다음과 같습니다이다 : 난 생산에서

class User < ActiveRecord::Base 
    establish_connection "users_#{RAILS_ENV}" 
    set_table_name "smf_users" 
end 

이 오류가 발생합니다 :

Mysql::Error: Table 'production_db. smf_users' doesn't exist: 

어떻게 잘못된 데이터베이스에 연결하려고 시도하고 있으므로 012가 아닙니다.올바른 테이블을 찾을 수 없습니다. 내가 말했듯이, 이것은 개발 모드에서 작동합니다.

제안 사항?

+0

어떤 시점에서 오류가 발생합니까? User.find()와 같은 것을 시도하거나 관계를 통해 무엇입니까? – catalpa

답변

1

내가 찾은. 어떤 모델에서 다른 모델을 가지고 있는데 belongs_to :users이 있고 그 모델이 Just Work로 작동 할 것으로 기대하십니까? 그렇지 않으면 캐싱을 살펴 봐야합니다. Rails가 추가 데이터베이스의 연결 데이터를 올바르게 캐싱하지 못했을 가능성이 있습니다.

+0

예, 그럴 수 있습니다. 이 경우 belongs_to : 사용자가 실패합니까? – arfon

+0

나는 그것이 가능할 것이라고 생각한다. 그리고 그것은 당신이 조사하고있는 오류를 만들어 낼 것이다. 여러 데이터베이스에서 연결 DSL을 사용할 수있을 것 같지 않습니다. 연관된 모델에서 자신 만의 : users 메소드를 만들 수 있습니다. User.all : conditions => [ 'associated_id =?', id]. 또 다른 옵션은 after_save 콜백을 사용하여 User 테이블을 다른 데이터베이스로 미러링하는 것입니다. – austinfromboston

+0

그래, 알았어. – arfon

0

시도 :

establish_connection configurations[RAILS_ENV]["users_#{RAILS_ENV}"] 
User.connection 

establish_connection 연결 정보의 해시를 필요로한다. 이것은 database.yml에서 반환해야합니다.

당신은 같은 메시지에 대한 로그를 확인 할 수 있습니다

다음

"users_production 데이터베이스가 구성되어 있지 않습니다"

가를 찾을 수없는 경우 해당 메시지는 액티브 :: 자료에 의해 발생 될 수

database.yml의 문자열에 의한 설정.

+0

고마워,하지만 그 오류를 보지 못했기 때문에 내가 config를 찾았다 고 확신한다. ActiveRecord가 연결을 캐싱하는 것과 관련이 있다고 확신합니다. – arfon

+0

프로덕션 콘솔에서 구성 [ 'users_production']을 실행하여 액세스 가능한지 확인 했습니까? – catalpa

+0

이것은 매우 이상합니다. User.connection을 입력하면 콘솔에서 정상적으로 작동하지만 여객을 통해 달리면 잘못된 DB에 도달합니다. – arfon

관련 문제