Errno::ENOENT: 해당 파일 또는 디렉터리가 없음 @ rb_sysopen - /etc/postgresql/15/main/postgresql.conf

관리자 페이지를 통해 업데이트를 시도해 보았지만, 정확히 무슨 일이 있었는지 모르겠는데 관리자 페이지가 하얗게 비어 보였고 프런트엔드는 정상적으로 작동했습니다. 그래서 커맨드 라인으로 다시 업데이트를 시도했는데 아래 오류가 발생했습니다.

Errno::ENOENT: No such file or directory @ rb_sysopen - /etc/postgresql/15/main/postgresql.conf

cd /var/discourse; ./launcher rebuild app
x86_64 arch detected.
Ensuring launcher is up to date
Fetching origin
Launcher is up-to-date
2.0.20240708-0023: Pulling from discourse/base
Digest: sha256:025e9c1f68
Status: Image is up to date for discourse/base:2.0.20240708-0023
docker.io/discourse/base:2.0.20240708-0023
/usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups.rb
/usr/local/bin/pups --stdin
I, [2025-02-06T20:57:43.044950 #1]  INFO -- : Reading from stdin
I, [2025-02-06T20:57:43.066724 #1]  INFO -- : File > /etc/service/postgres/run  chmod: +x  chown: 
I, [2025-02-06T20:57:43.072432 #1]  INFO -- : File > /etc/service/postgres/log/run  chmod: +x  chown: 
I, [2025-02-06T20:57:43.077790 #1]  INFO -- : File > /etc/runit/3.d/99-postgres  chmod: +x  chown: 
I, [2025-02-06T20:57:43.083299 #1]  INFO -- : File > /root/install_postgres  chmod: +x  chown: 
I, [2025-02-06T20:57:43.087962 #1]  INFO -- : File > /root/upgrade_postgres  chmod: +x  chown: 


FAILED
--------------------
Errno::ENOENT: No such file or directory @ rb_sysopen - /etc/postgresql/15/main/postgresql.conf
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/replace_command.rb:11:in `read'
replace failed with the params {"filename"=>"/etc/postgresql/15/main/postgresql.conf", "from"=>"data_directory = '/var/lib/postgresql/15/main'", "to"=>"data_directory = '/shared/postgres_data'"}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.

추가 정보

cat containers/app.yml | grep postgres

- "templates/postgres.template.yml"

어떻게 해결할 수 있을까요?

Digital Ocean 드롭렛, Ubuntu를 사용 중입니다. 도움이 된다면 말씀드리는 거예요.

컨테이너가 하나밖에 없습니다.

정말 그 * 기호가 있나요?

아래처럼 되어야 합니다.

- "templates/postgres.template.yml"

죄송합니다. 복사 및 붙여넣기 오류였습니다. 수정했습니다. 아니요, 없습니다.

다른 서버의 다른 인스턴스를 업데이트하려고 했는데 성공했습니다. 두 서버 모두 동일한 사양의 DO 드롭렛입니다.
무슨 일이 일어나고 있는지 모르겠습니다.

내 포럼이 2일째 다운되어 있습니다. 어떻게 해야 할지 모르겠어요. 스레드를 지원(지원) 섹션으로 옮겼습니다. 도움을 받을 수 있기를 바랍니다.

이것은 PostgreSQL 15 패키지가 설치되어 있지 않은 훨씬 오래된 Docker 이미지입니다. 따라서 다음과 같은 오류가 발생합니다:

launcher 파일이 수정되어 위에서 언급한 오래된 Docker 이미지를 사용하도록 고정되었을 가능성이 높습니다. 아래에 강조 표시된 최신 이미지로 변경한 후 다시 빌드를 시도해 보세요. (이전에 필요한 백업을 꼭 수행하십시오.)

답변 감사합니다. 방금 확인해 보니 launcher 파일의 베이스 이미지는 최신 버전인 것 같습니다.

root@host:/var/discourse# cat launcher | grep "base:2.0"
image="discourse/base:2.0.20250129-0720"

하지만 리빌드 시에도 여전히 오래된 이미지가 사용되고 있습니다. 이 오래된 이미지는 어디에서 가져오고 있는 건가요? 어떻게 확인할 수 있을까요?

app.yml 파일에서 base_image로 정의되어 있을 수도 있습니다. 해당 항목을 찾으면 해당 줄을 주석 처리하거나 (또는 삭제) 하면 됩니다.

그렇게 해도 해결되지 않으면, 해당 문자열의 일부에 대해 재귀적 검색을 시도해 볼 수 있습니다.

grep --exclude-dir shared -rI 20240708 /var/discourse

성공적으로 작동했습니다. 도움을 주셔서 정말 감사합니다.