본문 바로가기

소프트웨어 이야기

[passenger] 서버에 올라간 Rails Application 재시작하기

개발 환경 서버에 레일즈 애플리케이션을 올리고, 테스트를 할 때 중간중간에 로그를 추가해서, 로그를 보고 싶을 때가 있다.


이 때 git에 디버깅용 로그를 추가했다가, 지우는건 번거롭다.

그래서 서버에 올라가있는 레일즈 코드를 직접 수정해서, 중간중간에 필요한 로그를 보고 싶을 때가 있다.


passenger을 통해 레일즈와 웹서버를 연결시킨 경우, 

중간에 내가 코드를 직접 수정한건 어플리케이션을 재시작할 때까지는 반영되지 않는다. 


포스팅 관련 참고 자료 : restart_app


restart를 해줘야하는 이유

restart를 해줘야하는 이유는 영알못이지만 대충 읽어보면..

패신저가 여러 프로세스를 갖고 있어서, 애플리케이션을 재시작할 때까지 레일즈 코드를 수정한게 영향을 주지 않는다고 한다.


1. restart.txt으로 재시작하기

나는 패신저를 재시작해줄 때 , tmp/restart.txt의 수정시각을 변경해주는 방식을 사용한다.


사용 방법은 아래와 같다.


1. 서버에서 애플리케이션이 있는 경로로 들어간다.

   ex) cd /var/app/www/current/

2. 아래의 명령문을 실행한다.

   touch tmp/restart.txt

   만약에 애플리케이션 하위에 tmp/restart.txt  파일이 없으면, 임의로 빈 restart.txt 파일을 tmp폴더 아래에 만들어주면 된다. 

   (이번에 나도 이렇게 사용해봤었다.)


이 방식을 그냥 사용해왔는데, 내가 참고한 글에서 재밌는 이야기를 봤다.

restart.txt의 수정시각을 변경해주면 애플리케이션이 재시작되는 이 메커니즘이 사실 좀 특이한데,

이런 메커니즘이 생긴 배경에 대한 이야기이다.


패신저는 공유호스팅이 인기있었을 때 설계되었다고 한다. 그런데 그 당시에는 FTP로만 접근할 수 있었고, SSH 으로는 접근할 수 없었다고 한다.


그래서 passenger-config restart-app 같은 커맨드를 직접 칠 수 없었기 때문에 FTP 만으로, 패신저가  timestamp를 확인할 수 있어야했었다고 한다. 그래서 restart.txt 라는 방식이 생겼다고 한다.


2. passenger-config restart-app으로 재시작하기

passenger-config restart-app
Please select the application to restart.
Tip: re-run this command with --help to learn how to automate it.
If the menu doesn't display correctly, press '!'

 ‣   /Users/phusion/testapp/public (development)
     Cancel

재시작하고 싶은 애플리케이션 경로에 들어가서, 저 명령문을 쳐주면 된다.

찾아보니 restart.txt 를 만들어주고  touch를 해주는 것 보다는 이게 더 깔끔해보인다.


-끝-

태그