2011-02-10 2 views
1

제가 레일즈 3.0.3 앱의 데이터베이스를 바꾸고 있습니다. postgres를 mysql에서 개발하여 아마존의 rds . 내가 변경하기 전에 내 dev 머신에 mysql2 어댑터를 사용하여 mysql을 사용하여 테스트 코드를 실행했다. 내 테스트 코드에서 아직까지 아직까지 얻을 수 없었던 일부 오류가 발생했습니다 ( ). 기본적으로 큰 xml 업로드를 저장하는 데 사용되는 모델이 있습니다. 내 테스트 코드는 생성 라인은 다음과 같은 오류이상한 오류를 일으키는 postgres에서 mysql 로의 마이그레이션 mysql2 :: 오류 : MySQL 서버가 없어졌습니다

ActiveRecord::StatementInvalid: Mysql2::Error: SAVEPOINT active_record_1 does not exist:  ROLLBACK TO SAVEPOINT active_record_1 
/Users/conor/.rvm/gems/ruby-1.9.2-p136/gems/activerecord-3.0.3/lib/ active_record/connection_adapters/abstract_adapter.rb:202:in `rescue in log' 
/Users/conor/.rvm/gems/ruby-1.9.2-p136/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract_adapter.rb:194:in `log' 
/Users/conor/.rvm/gems/ruby-1.9.2-p136/gems/mysql2-0.2.6/lib/ active_record/connection_adapters/mysql2_adapter.rb:314:in `execute' 
/Users/conor/.rvm/gems/ruby-1.9.2-p136/gems/mysql2-0.2.6/lib/ active_record/connection_adapters/mysql2_adapter.rb:358:in `rollback_to_savepoint' 
/Users/conor/.rvm/gems/ruby-1.9.2-p136/gems/activerecord-3.0.3/lib/ active_record/connection_adapters/abstract/database_statements.rb: 149:in `rescue in transaction' 
/Users/conor/.rvm/gems/ruby-1.9.2-p136/gems/activerecord-3.0.3/lib/ active_record/connection_adapters/abstract/database_statements.rb: 127:in `transaction' 
/Users/conor/.rvm/gems/ruby-1.9.2-p136/gems/activerecord-3.0.3/lib/ active_record/transactions.rb:204:in `transaction' 
/Users/conor/.rvm/gems/ruby-1.9.2-p136/gems/activerecord-3.0.3/lib/ active_record/transactions.rb:287:in `with_transaction_returning_status' 
/Users/conor/.rvm/gems/ruby-1.9.2-p136/gems/activerecord-3.0.3/lib/ active_record/transactions.rb:237:in `block in save' 
/Users/conor/.rvm/gems/ruby-1.9.2-p136/gems/activerecord-3.0.3/lib/ active_record/transactions.rb:248:in `rollback_active_record_state!' 
/Users/conor/.rvm/gems/ruby-1.9.2-p136/gems/activerecord-3.0.3/lib/ active_record/transactions.rb:236:in `save' 
.... 

내가 텍스트 필드에 파일 내용을 저장 한을 던지고이

test "xml upload for large file" do 
    file = File.new("test/files/lib/upload_sample.xml") 
    upload = XmlUpload.create(:xml_contents => contents = file.read) 
    ..... 
    ..... 
end 

같은 것을 보인다. 나는 깨닫는다 나는 진지하게 s3에 파일을 저장하는 것을보아야한다. 그러나 이것은 내가 가지고있는 설정이다. 포스트 그레스에서는 모든 것이 잘 작동했습니다. 그러나 mysql을 사용하기 위해서는 : 변수를 설정해야했습니다. 따라서 표준 텍스트 대신 LONGTEXT가 사용되었습니다. 필드. 파일은 매우 클 수 있습니다하지만 작은 파일을 사용하여 테스트 할 때 아무런 문제가 없다

내가 완전히 잘못 짚었 수 있었다 그러나 나는 문제는 데이터베이스 연결에 의해 발생 될 수 있음을 의심

은 삭제에 을 기반으로하고 모드에서 파일 업로드를 시도 할 때 오류가 발생합니다. 이 오류에 대한 검사를 수행했는데 무엇이 연결을 끊을 수 있는지 확신 할 수 없습니다. 파일에 8 시간 (기본 연결 끊기 시간)이 걸리지 않습니다.

Mysql2 :: 오류 : MySQL 서버가 종료되었습니다. 어웨이 : INSERT INTO xml_uploads ........

내 database.yaml 설정은 다음과 같습니다.

test: 
    adapter: mysql2 
    encoding: utf8 
    reconnect: true 
    database: app_test 
    username: username 
    password: password 
    host: localhost 

사람이 문제가 무엇인지에 관해서는 단서가 있습니까 그리고 그것은 방법을 고정 할 수 있습니까? 어떤 도움이라도 대단히 감사하겠습니다.

+0

코너에 조정에 대한 약간의 정보가, 나는 자바와 내가 함께 몇 년 전에이 문제를 가지고하는 데 사용 문제가 무엇인지 제대로 기억할 수 없습니다. 그러나 우리는 서버에 과부하가 걸렸습니다 (아마도 트랜잭션이 서버에 비해 너무 컸을 것입니다). 그리고 "서버가 사라졌습니다."라는 메시지와 함께 응답을 멈추었습니다. 당신은 작은 데이터 세트로 이것을 시도 했습니까? 또는 작은 파일? – Augusto

+0

안녕하세요 Augusto, 답장을 보내 주셔서 감사합니다.작은 파일로 테스트를 시도했지만 모든 것이 원활하게 실행되지만 업로드 할 수있는 데이터의 종류를 나타내는 테스트 파일은 실패합니다. 이 파일들은 크고 (1.5-2.5mb) 크나큰 것은 아닙니다. 나는 연결이 시간 초과되고 삽입 전에 삭제되었다고 생각하지만 왜 그렇게 될지 확신하지 못합니다. – Conor

+0

mysql에서 매우 큰 시간 초과를 설정하십시오 - 자세한 내용은 여기에서 찾을 수 있습니다 - http://dev.mysql.com/doc/ refman/5.0/ko/gone-away.html – ajreal

답변

3

어쨌든 S3에 데이터를 저장하는 것으로 결정했지만 친구가이 문제에 대한 해결책의 방향으로 나를 지적 했으므로 테스트를 마쳤습니다. 그래서 나는 누군가의 경우 여기에 게시해야한다고 생각했습니다. 그렇지 않으면 같은 문제가 발생합니다.

기본적으로이 문제는 max_allowed_packet 변수가 블로그/텍스트 필드 크기보다 작은 값으로 설정되어 발생합니다. 쿼리를 실행할 수 없으므로 연결이 끊어집니다. 여기

http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_max_allowed_packet

변수의 max_allowed_packet에 대한 몇 가지 세부 사항 또한 RDS 인스턴스

http://www.henrybaxter.ca/?p=111