ECS에서 rails db : migrate : reset 할 때 발생하는 오류 (00 is being accessed by other users) 제거

주의



포트폴리오용으로 작성한 사이트의 프로덕션 환경을 직접 조작하고 있습니다.
적절한 대처법이 아닐지도 모르기 때문에, 우선 에러를 고치고 싶은 분은 부디.

배경



rails 컨테이너에서 rails db:migrate:reset을 사용할 수 없음



언제 seed 파일을 변경했기 때문에 일단 RDS를 재설정하려고 rails 컨테이너에서 위의 명령을 치면 제목 오류가 발생했습니다. 다른 사용자 (또는 컨테이너)가 연결되어 있고 실행할 수 없다는 것입니다.

사용 기술



・ECS:EC2 타입
・RDS:PostgresQL(11.11)

위의 인스턴스 작성은 생략합니다.

했던 일



EC2에 psql 명령을 설치하여 RDS에 연결



rails 컨테이너에서 RDS에 액세스하려고했지만 중요한 psql 명령을 설치하지 않았습니다.
그래서 응급 처치로서 EC2에 psql 명령을 넣어 연결했습니다.

이하, 그 순서입니다.
(현재 amazon-linux-extras는 postgresql11까지만 설치할 수 있습니다.
# ご使用のバージョンに合わせてインストールしてください
$ sudo amazon-linux-extras postgresql11

# バージョンの確認
$ psql --version
psql (PostgreSQL) 11.5

# DBアクセス用のuserがいない場合は作成してください
$ sudo adduser <ユーザー名>
$ su - <ユーザー名>

# postgresサーバーに接続
$ psql \
> --host=<RDSのエンドポイント> \
> --username=<ユーザー名>
> --password \
> --port=5432 \
> --dbname=<RDSのインスタンス名>

이것으로 연결이 완료됩니다.
(연결할 수 없을 때 RDS 보안 그룹의 인바운드를 확인하십시오)

RDS에 액세스하는 프로세스 삭제



접속할 수 있으면, 나머지는 접속중의 프로세스를 찾아내 삭제하는 것 뿐입니다.
# すべてのプロセスを表示
SELECT pid FROM pg_stat_activity where pid <> pg_backend_pid();

# 表示例
1234
1235

# プロセスを削除
SELECT pg_terminate_backend(1234);
SELECT pg_terminate_backend(1235);

# psqlの終了
\q
# コンテナに入ったのち、下記のコマンドを実行
$ bundle exec rake db:migrate:reset DISABLE_DATABASE_ENVIRONMENT_CHECK=1

이상이 됩니다.

요약



개발 환경에서 PostgresQL을 컨테이너화했기 때문에 오류가 발생하면 DB 컨테이너를 깨고 재구성했습니다. 그 때문에, 프로덕션 환경의 대처를 모르게 당황했습니다. 아무것도 생각하지 않고 작업하면 좋지 않네요 공부합니다.

좋은 웹페이지 즐겨찾기