프로덕션 환경의 데이터베이스 재 작성 (DB 파괴 시스템 처리)

3527 단어 초보자
로컬 환경에서는 제대로 표시되어 있는데 프로덕션 환경에서 페이지가 표시되지 않는다!



응! ! !

다른 페이지는 보이지만 ...

주의를 기울여 상황을 정리하고 원인을 파악합니다.

1, 배포 자체는 잘 하고 있다? 따라서 다른 페이지는 표시됩니다.

2, 특정 페이지 만 표시되지 않음

3, 그러나 로컬에서는 제대로 표시되고 있다(여기 중요)

이상으로부터 무려~쿠 특정 페이지에 대해서 로컬과 프로덕션 환경에서 무언가 차이가 일어나고 있다고 상상한다.

예를 들어 bundler 의 버젼이 로컬과 프로덕션 환경에서 다른 경우 전체의 배포가 잘 되지 않을 것이므로 아마 해당 페이지에 대해서 어떠한 에러일까~

라고 생각해도 어쩔 수 없기 때문에 cat명령으로 production 로그를 봐 보기로 한다
cat /var/www/(アプリ名)/current/log/production.log

방대한 로그를 쭉---와 바라보고 있으면 ...



아 FATAL (오류) 표시를 발견했다.

흠 흠 "상품 상태"근처에서 오류가 발생합니다.
상품 상태는 여기입니다.


아 - 이 표시 만들고 데이터를 전송할 수 있도록 모델과 마이그레이션 파일 수정 했어 ~
라고 생각해

:status는 컬럼명 :state를 변경했구나 뒤 int형으로 변경했구나~라고 생각하면서

여기서 깨달았다!



프로덕션 환경의 데이터베이스 그대로 옳고.



곧 프로덕션 mysql을 확인
mysql -u root -p

데이터베이스 보기
show databases;

데이터베이스 지정
use データベース名_production;

테이블 확인
show tables;

테이블의 내용을 확인
show columns from テーブル名;

에서 확인했습니다.

있었다



:status로 바꿔야 하는 컬럼이 프로덕션 환경에서는 :state인 채로 있었습니다.

로컬 환경과 프로덕션 환경에서 테이블 내용이 다르면 프로덕션 환경에서는 올바르게 표시되지 않습니다.

원인 파악 성공



그럼 다음에 어떻게 할까
프로덕션 환경에서 rails db : migrate를 반복해도 전혀 migrate되지 않습니다.

뭐~ 생각해 보면 프로덕션의 데이타베이스가 간단하게 퐁퐁 다시 쓰여져 버리면 혼란스러울 뿐이니까도 집중 maigrate의 방법을 생각하면.

내가 찍은 방법은

프로덕션 환경의 DB를 일단 리셋하고 다시 재작성한다!



으으오오오오오! 하고 있어! 프로덕션 환경의 DB를 파괴한다!



상황 설명이 길어졌지만 여기에서 본제

프로덕션 데이터베이스 재설정
RAILS_ENV=production DISABLE_DATABASE_ENVIRONMENT_CHECK=1 bundle exec rake db:drop

포인트입니다
의도적으로 production environment의 DB를 파괴하고 싶다면,
환경 변수 DISABLE_DATABASE_ENVIRONMENT_CHECK=1 지정해 주면 OK입니다.

DB의 파괴계는 커맨드 실행을 방지하는 기능이 Rails5 이후는 장비되어 있기 때문에
db:drop
db:drop:all
db:purge
db:purge:all
db:purge:test
db:schema:load
명령은 DISABLE_DATABASE_ENVIRONMENT_CHECK=1이 필요합니다.

프로덕션 환경의 DB 파괴에 성공한 후에는 DB를 재작성하는 작업
rails db:create RAILS_ENV=production

프로덕션 환경에서 마이그레이션
rails db:migrate RAILS_ENV=production

이것으로 OK!


무사 프로덕션 환경의 데이터베이스 재구축 완료입니다.

좋은 웹페이지 즐겨찾기