2010-06-17 3 views
13

capistrano를 사용하여 레일 응용 프로그램을 배포하려고하지만 마이그레이션을 실행하는 데 문제가 있습니다. 내 개발 환경에서 난 그냥 내 데이터베이스로 sqlite를 사용하지만 내 프로덕션 서버에서 MySQL을 사용합니다.capistrano를 사용하여 배포 할 때 서버에서 마이그레이션 실행

문제는 원격 위치에서 내 데이터베이스에 연결할 수 없기 때문에 마이 그 레이션을 내 서버가 아닌 내 로컬 컴퓨터에서 실행해야한다는 것입니다.

내 서버 설정 : ngnix, passenger, mysql 및 git 저장소를 실행하는 데비안 상자.

가장 쉬운 방법은 무엇입니까?

업데이트 : 은 (내가 example.com 내 실제 도메인을 대체)

set :application, "example.com" 
set :domain, "example.com"   

set :scm, :git  
set :repository, "[email protected]:project.git" 

set :use_sudo, false 

set :deploy_to, "/var/www/example.com" 

role :web, domain 
role :app, domain 
role :db, "localhost", :primary => true 

after "deploy", "deploy:migrate" 

나는 캡 배포를 실행하면이 시도 될 때까지, 모든 것이 잘 작동 :

가 여기 내 배포 스크립트입니다 마이그레이션을 실행합니다. 여기에 내가지고있어 오류가있다 : 나는 내 로컬 컴퓨터에서 서버에서 마이그레이션을 실행하는 데 필요하지 왜

 
** [deploy:update_code] exception while rolling back: Capistrano::ConnectionError, connection failed for: localhost (Errno::ECONNREFUSED: Connection refused - connect(2)) 
connection failed for: localhost (Errno::ECONNREFUSED: Connection refused - connect(2))) 

이다.

아이디어가 있으십니까?

답변

6

배포 사용자를 서버에 mysql 사용자로 추가 했습니까? 로컬 호스트가 아니라 자체를 참조하는 서버라고 생각합니다.

또한 당신은 당신의 배포 스크립트에 사용자를 정의하지 않은 : 내 deploy.rb에서

set :user, "deploy_user_name" 

role :web, domain 
role :app, domain 
role :db, domain, :primary => true 
+0

글쎄, 배포 사용자 이름은 내 로컬 사용자 이름과 같습니다. 또한 로그인하고 ssh를 통해 마이그레이션을 실행하면 정상적으로 작동합니다. – Pandafox

+0

흠. 실제로 게시 한 오류는 update_code에 있습니다. 내가 확인한 것인가, 응용 프로그램이 실제로 example.com이라고 불렀는지, 배포를 마쳤습니까? 설치 및 캡 전개 : 로컬 컴퓨터에서 확인 하시겠습니까? example.com은 개인 정보 보호를 위해 여기에 넣은 것입니다. – mark

+0

ㅎ, 예, 내 실제 도메인을 privacy.com의 example.com으로 대체했습니다. 코드가 내 서버에 배치되면 잘됩니다. 단지 capistrano가 서버가 아닌 내 로컬 시스템에서 마이그레이션을 실행하려고합니다. – Pandafox

41

시도는 설정/deploy.rb 파일에

after "deploy", "deploy:migrate" 

를 추가 할 수 있습니다. 이렇게하면 프로젝트를 성공적으로 배포 한 후 서버에서 마이그레이션이 실행됩니다.

+0

나는 bundle_install 작업을, 그래서 난 후 사용'해요 : bundle_install를, "배포 : 마이그레이션"' –

+1

을 나를 위해 일했다. 리포지토리의 올바른 분기로 커밋을 적용하여 영향을 미치도록하십시오. – scarver2

+1

@ denis.peplin 카피스트라가 번들을 제공하지 않습니다. SSH를 통해 보석을 제거하고 자동으로 다시 설치되었습니다. – Besi

관련 문제