우리는 모든 고객이 자신의 데이터베이스를 얻는 Ruby On Rails 웹 애플리케이션을 만들고 있습니다.
웹 사이트에서 양식을 작성한 후에 데이터베이스를 만들어야합니다.레일즈상의 루비에서 mySQL 데이터베이스를 복사하는 방법은 무엇입니까?
우리는 우리가 복사해야하는 모든 테이블과 컬럼을 가진 템플릿 데이터베이스를 가지고 있습니다. 루비 레일에서 프로그래밍 방식으로 어떻게이 작업을 수행 할 수 있습니까?
우리는 모든 고객이 자신의 데이터베이스를 얻는 Ruby On Rails 웹 애플리케이션을 만들고 있습니다.
웹 사이트에서 양식을 작성한 후에 데이터베이스를 만들어야합니다.레일즈상의 루비에서 mySQL 데이터베이스를 복사하는 방법은 무엇입니까?
우리는 우리가 복사해야하는 모든 테이블과 컬럼을 가진 템플릿 데이터베이스를 가지고 있습니다. 루비 레일에서 프로그래밍 방식으로 어떻게이 작업을 수행 할 수 있습니까?
모든 컨트롤러에서 다음 방법을 정의 할 수 있습니다.
def copy_template_database
template_name = "customerdb1" # Database to copy from
new_name = "temp" #database to create & copy to
#connect to template database to copy. Note that this will override any previous
#connections for all Models that inherit from ActiveRecord::Base
ActiveRecord::Base.establish_connection({:adapter => "mysql", :database => template_name, :host => "olddev",
:username => "root", :password => "password" })
sql_connection = ActiveRecord::Base.connection
sql_connection.execute("CREATE DATABASE #{new_name} CHARACTER SET latin1 COLLATE latin1_general_ci")
tables = sql_connection.select_all("Show Tables")
#the results are an array of hashes, ie:
# [{"table_from_customerdb1" => "customers"},{"table_from_customerdb1" => "employees},...]
table_names = Array.new
tables.each { |hash| hash.each_value { |name| table_names << name }}
table_names.each { |name|
sql_connection.execute("CREATE TABLE #{new_name}.#{name} LIKE #{template_name}.#{name}")
sql_connection.execute("INSERT INTO #{new_name}.#{name} SELECT * FROM #{template_name}.#{name}")
}
#This statement is optional. It connects ActiveRecord to the new database
ActiveRecord::Base.establish_connection({:adapter => "mysql", :database => new_name, :host => "olddev",
:username => "root", :password => "password" })
end
이렇게하면 위임 키 무결성이 유지되는지 확실하지 않습니다. 나는 그것이 템플릿 데이터베이스가 어떻게 생성되는지에 달려 있다고 생각한다.
템플릿 스키마 생성 코드는 필요한 모든 테이블/인덱스/뷰/프로 시저 생성 문을 포함하는 스크립트에 넣을 수 있습니다. "template_schema.sql"또는 무엇이든 호출 한 다음 데이터베이스에서 스크립트를 실행하십시오. 귀하의 선택 (루비에서, 그게 당신이 쫓아 온다면) 그리고 당신은 끝났어.
최상의 방법은 각 데이터베이스 개체를 소스 제어에서 별도의 파일에 저장 (개별 개체의 변경 내용을 쉽게 추적 할 수 있도록) 한 다음 배포의 일부로 단일 파일로 병합하는 것입니다.
난 당신이 무슨 뜻인지 모르겠어요하지만 당신은, 템플릿 데이터베이스를 덤프 루비의 명령 줄 기능을 사용하는 mysqldump 프로그램을 사용하여 새 데이터베이스와 다시 수입을 만들 수 있습니다
> mysqldump -uroot -proot templateDB > dump.sql
> mysql -uroot -proot --execute="CREATE DATABASE newDB"
> mysql -uroot -proot newDB < dump.sql
Here이입니다 Ruby에서 명령 행 옵션을 호출하는 좋은 설명. yaml_db
당신은, 플러그인을 설치 새 데이터베이스를 가리 키도록 레이크 작업, 변경 연결 문자열을 사용 data.yml 파일로 (MySQL을 포함) 레일 데이터베이스를 덤프해야하고 마침내에 data.yml로드 사용하여
다른 레이크 작업을 사용하는 새로운 데이터베이스 (mysql 포함). 매우 간단합니다.
그 밖의 유용한 정보 감사. – Tilendor
내 대답이 도움이 되었습니까? 또는 적어도 도움이 될까요? – abarax
코드 내부에서 할 수있는 일을 위해 쉘에 갈 필요가 있음을 정말로 조심스럽게 생각합니다. 불필요한 의존성을 도입하고 싶지 않습니다. 그러나 당신이 제공 한 링크는 완전히 무관 한 무언가에 매우 유용했습니다. – Tilendor