루트 권한으로 "bundle exec rake s3:upload_assets" 명령을 실행해 보았는데, 다음과 같은 오류가 발생합니다: Could not locate Gemfile or .bundle/ directory.
루트 권한 없이 "sudo -E -u discourse bundle exec rake s3:upload_assets" 명령을 사용해서도 시도해 보았으나, 다음과 같은 오류가 발생했습니다: sudo: unknown user discourse sudo: error initializing audit plugin sudoers_audit
두 명령 모두 다음 디렉터리에서 실행했습니다: /var/discourse
Docker 등을 사용하지 않는 일반 설치 환경입니다.
이 문제를 어떻게 해결해야 이 명령을 실행할 수 있을까요?
감사합니다.
pfaffman
(Jay Pfaffman)
4월 9, 2025, 11:17오후
3
컨테이너 안에서 실행해야 합니다.
cd /var/discourse
./launcher enter app
그런 다음 해당 명령어를 실행하세요
감사합니다! 덕분에 더 나아갔는데, 이제 이 오류가 나요:
root@redacted:/var/www/discourse# sudo -E -u discourse bundle exec rake s3:upload_assets
/root is not writable.
Bundler will use `/tmp/bundler20250409-510203-w6snye510203' as your home directory temporarily.
ERROR: Ensure S3 is configured in config/discourse.conf or environment vars```
Discourse 사이트 설정에서 모든 것을 구성해 두었습니다. Docker를 사용하지 않으므로 환경 변수는 필요하지 않은 것 아닌가요?
app.yml에 환경 변수를 추가하고, 다시 빌드한 뒤 앱에 다시 접속하여 명령을 실행했는데 다음과 같은 오류가 발생합니다:
`/root`는 쓰기 불가입니다.
Bundler는 임시로 `/tmp/bundler20250409-1393-48ek5u1393'`를 홈 디렉터리로 사용할 것입니다.
CORS 규칙 설치 중...
biohacking-forum 버킷에 ASSETS S3 CORS 규칙 집합 적용 시도 중.
rake 중단됨!
Seahorse::Client::NetworkingError: Empty or incomplete response body (Seahorse::Client::NetworkingError)
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.219.0/lib/seahorse/client/plugins/raise_response_errors.rb:17:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/plugins/sse_cpk.rb:24:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/plugins/dualstack.rb:21:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/plugins/accelerate.rb:43:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.219.0/lib/aws-sdk-core/plugins/checksum_algorithm.rb:169:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.219.0/lib/aws-sdk-core/plugins/jsonvalue_converter.rb:16:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.219.0/lib/aws-sdk-core/plugins/invocation_id.rb:16:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.219.0/lib/aws-sdk-core/plugins/idempotency_token.rb:19:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.219.0/lib/aws-sdk-core/plugins/param_converter.rb:26:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.219.0/lib/seahorse/client/plugins/request_callback.rb:89:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.219.0/lib/aws-sdk-core/plugins/response_paging.rb:12:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.219.0/lib/seahorse/client/plugins/response_target.rb:24:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.219.0/lib/aws-sdk-core/plugins/telemetry.rb:39:in `block in call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.219.0/lib/aws-sdk-core/telemetry/no_op.rb:29:in `in_span'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.219.0/lib/aws-sdk-core/plugins/telemetry.rb:53:in `span_wrapper'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.219.0/lib/aws-sdk-core/plugins/telemetry.rb:39:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.219.0/lib/seahorse/client/request.rb:72:in `send_request'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/client.rb:6359:in `get_bucket_cors'
/var/www/discourse/lib/s3_helper.rb:401:in `fetch_bucket_cors_rules'
/var/www/discourse/lib/s3_helper.rb:168:in `ensure_cors!'
/var/www/discourse/lib/s3_cors_rulesets.rb:60:in `sync'
/var/www/discourse/lib/tasks/s3.rake:183:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => s3:upload_assets => s3:ensure_cors_rules
(전체 추적을 보려면 --trace 옵션과 함께 태스크를 실행하세요)
pfaffman
(Jay Pfaffman)
4월 10, 2025, 3:00오후
7
환경 변수는 필요합니다. 업로드용 S3 호환 객체 저장소 제공자 구성 문서에 그렇게 명시되어 있고, 오류 메시지도 그렇게 안내하는 이유가 바로 그 때문입니다.
설정에서 구성하면 좋은 결과가 나오기 어렵기 때문에, 모든 S3 변수는 숨김 설정으로 이동되어야 합니다.
죄송합니다. Docker를 사용하지 않는다는 점을 깜빡했습니다. 하지만 네, 여전히 ENV 변수에 설정해야 합니다. 저는 개발 환경에서 S3에서 데이터베이스를 복원하기 위해 이렇게 하고 있습니다.
개발 환경을 위해 이 작업을 수행하고 있지 않다면, 큰 실수를 하고 있을 가능성이 매우 높습니다.
@Eviepayne
다음과 같이 조치하여 수정했습니다 - 오류가 두 개 있었습니다.
첫째, 두 번째 오류는 다음을 수행하여 수정했습니다:
rails c
Upload.find(386).destroy!
exit
이것으로 손상된 게시물(잘못된 형식의 텍스트 등)이 수정되었습니다.
그다음 화면에 표시되던 빨간색 오류는 랜덤 서브도메인(Cloudflare에서 제공)을 사용하여 해당 도메인에 업로드를 시도했기 때문에 발생했습니다. 새 도메인(연결된 도메인을 포함)으로 파일을 업로드해야 했습니다.
다음 명령을 사용했습니다:
sudo -E -u discourse bundle exec rake s3:upload_assets
그 다음:
sudo -E -u discourse bundle exec rake uploads:migrate_to_s3
그 후 포럼이 제대로 로드되었고, 마우스 오른쪽 버튼을 눌러 새 탭에서 이미지를 열었을 때 R2에 호스팅되고 있는 것을 확인할 수 있었습니다. 이후 백업을 수행했습니다.
마지막으로 다음 명령을 사용하여 모든 것을 정리했습니다:
sudo -E -u discourse bundle exec rake uploads:clean_up
이것으로 해당 파일의 저장 공간이 해제되었습니다(마이그레이션 전 OS 수준과 Discourse 수준에서 두 파일 모두에 대한 로컬 백업이 여전히 있음을 참고하십시오).
이제 모든 것이 완벽하게 작동합니다!