2013-01-18 6 views
1

사용자가 admin 프론트 엔드 인터페이스를 통해 database.yml 내용을 수정할 수있는 시스템을 구축 중입니다.레일 시작 후 ActiveRecord를 다시 초기화하십시오.

database.yml의 변경 사항은 응용 프로그램을 다시 시작할 때까지 영향을주지 않습니다. 사용자 (물리적 박스에 대한 SSH 액세스 권한이 없을 수도 있음)를 강제로 응용 프로그램을 수동으로 복원하는 대신 ActiveRecord가 구성 시작시 다시 시작되도록하는 방법을 원합니다.

서버를 다시 시작해야하는 대신 ActiveRecord가 초기 시작 후 강제로 다시 초기화되도록 할 방법이 있습니까?

이론적 근거

이 두 가지 사용 사례가있다 -가) 초기 설정 마법사 나) 생산 지원되는 데이터베이스에 SQLite는 평가 데이터베이스에서 이동은.

우리의 응용 프로그램을 설치하고 사용자가 다른 것들 사이에, 사용자가 평가 데이터베이스에 내장 사이에 선택할 수있는 설정 마법사로 표시됩니다 처음을 시작한 후 초기 설정 마법사

sqlite를 사용하거나 프로덕션 지원 데이터베이스를 지정하십시오. 데이터베이스 속성을 지정해야합니다. 사용자가 서버에있는 yml 파일을 편집하도록 요청하는 대신, 초기 설치 중에 현재 프론트 엔드가되도록하고 싶습니다. 사용자가 평가 데이터베이스에 내장 된 이동하지만, 변경하기로들이 반영하도록 데이터베이스 설정을 업데이트해야 프로덕션 데이터베이스로 마이그레이션하고자하는 경우

생산 지원되는 데이터베이스

에 SQLite는 평가 데이터베이스에서 이동 이 변화. 위와 같은 이유로, 사용자가 설정 파일을 편집하도록 요구하지 않고, 프론트 엔드가 필요합니다. 특히, 응용 프로그램을 시작하려고 할 때 작동하지 않는다는 것을 사용자가 알아 차리기보다는 응용 프로그램에서 연결, 사용 권한 등을 확인할 수 있기 때문입니다 그리고 그들은 activerecord 예외를 얻는다.

+1

이것은 끔찍한 생각처럼 보입니다. – coreyward

+0

왜 그렇게 생각하는지 자세히 설명해주십시오. –

+0

이렇게하는 이유를 자세히 설명해주십시오. – coreyward

답변

0

이론적으로, 다음에이를 수 :

config = YAML::load File.read(File.join(Rails.root, "config/database.yml")) 

ActiveRecord::Base.establish_connection config[Rails.env] 

당신은 모든 레일이 효과적 일 수 있도록 실행중인 프로세스의 재 연결 코드를 실행해야 할 것이다. 데이터베이스 구성 변경시 경쟁 조건, 새로운 database.yml의 구문 문제 등이 있습니다.

1

다음 요청에서 레일스 스택을 다시 시작하십시오. 서버에 대한 액세스.

system("touch #{File.join(Rails.root,'tmp','restart.txt')") 
+0

감사합니다. 그러나 우리는 승객을 태우고 있지 않습니다. –

관련 문제