Code Workspaces 문제 해결
오류가 발생한 단계와 전체 오류 메시지에서 원인을 구분합니다. 로그를 공유할 때는 토큰, 비밀과 민감한 데이터를 제거합니다. 해결되지 않는 경우 Palantir 담당자에게 필요한 의존성과 재현 조건을 전달합니다.
세션이 유효하지 않다는 Unauthorized 오류
Unauthorized - Session is no longer valid. It may have timed out. Please refresh the page.가 나타나면 다음을 확인합니다.
- 페이지를 새로 고칩니다.
- Google Chrome을 사용합니다. Code Workspaces에서 Safari는 지원하지 않습니다.
- 보안 표지가 있는 데이터를 읽은 뒤 그 데이터 접근을 잃었다면 Running > Restart workspace로 데이터를 로드하지 않은 새 세션을 시작합니다.
- 첫 사용이라면 조직 IT 관리자가 Code Workspaces를 허용 목록에 넣었는지 확인합니다.
재시작과 체크포인트 복원은 세션 수명의 조건을 따릅니다.
콘텐츠가 차단되었다는 오류
The content is blocked. Contact the site owner to fix the issue.는 CSP의 콘텐츠 통제를 확인해야 하는 경우입니다. 임의 CDN에서 JavaScript를 불러오는 방식은 허용하지 않으며 folium 같은 패키지가 여기에 해당합니다.
필요한 기능이 Dash, Streamlit 또는 TensorBoard의 지원 미리보기 경로에 해당하는지 확인합니다. 다른 필수 업무는 Palantir 담당자와 지원 방식을 확인합니다.
R package 또는 namespace load failed
예를 들어 hdf5r.so를 열 때 libhdf5_serial_hl.so.100: cannot open shared object file: No such file or directory가 나오면 R 패키지 자체뿐 아니라 시스템 공유 라이브러리 의존성을 확인합니다.
플랫폼은 공격 표면을 줄이기 위해 Linux 패키지를 제한하므로 필요한 라이브러리가 기본 설치되어 있지 않을 수 있습니다. 필요한 Linux 패키지의 제공 여부를 Palantir 담당자에게 문의합니다. 지원하지 않는 패키지와 단순 누락 의존성을 구분합니다.
pip wheel 빌드 실패
가능하면 시스템 의존성을 함께 구성하는 Conda 패키지를 사용합니다. 필요하면 패키지를 Conda로 빌드하여 Artifacts에 게시하는 경로를 검토합니다.
PyPI 설치가 필요하면 작업공간의 관리형 환경 명령을 사용합니다.
: "${PYPI_PACKAGE:?PYPI_PACKAGE is required}"
maestro env pip install "$PYPI_PACKAGE"
실패 메시지가 지정하는 시스템 의존성 또는 파일을 제공하는 Conda 패키지를 찾고 설치한 뒤 다시 시도합니다.
: "${CONDA_DEPENDENCY:?CONDA_DEPENDENCY is required}"
maestro env conda install "$CONDA_DEPENDENCY"
예를 들어 octis의 libsvm wheel을 빌드하다 command 'g++' failed: No such file or directory가 나오면 컴파일러가 없는 경우입니다.
maestro env conda install gxx_linux-64
그다음 원래 설치를 다시 시도합니다.
maestro env pip install octis
이 처리는 명시된 g++ 누락을 해결하는 경로입니다. 다른 의존성이나 버전 오류가 남으면 새 오류에 맞는 조건을 확인합니다.
큰 Git 객체 때문에 동기화 실패
Attempting to sync data to Code Repository failed는 동기화할 커밋이 너무 큰 경우 발생할 수 있습니다. 데이터 같은 큰 비코드 파일은 저장소 대신 출력 데이터셋이나 데이터 저장 디렉터리에 보관합니다.
현재 파일을 지우거나 .gitignore에 추가해도 과거 커밋의 큰 blob은 남습니다. 먼저 git-filter-repo의 분석 기능으로 이력의 크기와 경로를 확인할 수 있습니다. 이 분석은 이력을 재작성하지 않습니다.
git filter-repo --analyze
.git/filter-repo/analysis의 보고서를 확인합니다.
이력 정리 전 조건
이력 재작성은 커밋 ID를 바꾸고 기존 이력을 제거하는 작업입니다. 필요한 파일과 미게시 변경을 보존하고, 원격 저장소 및 영향을 받는 브랜치/태그와 협업자 영향을 확인한 담당자만 수행합니다.
원본을 보존한 별도 fresh clone에서 정리합니다. 로컬 저장소를 복제할 때는 git clone --no-local을 사용하며, 원격에 아직 없는 로컬 커밋도 복제 대상에 포함되어야 합니다. 미커밋 파일은 clone에 포함되지 않으므로 별도로 보존합니다. fresh-clone 안전 검사를 우회하는 --force를 기본 해결책으로 사용하지 않습니다.
크기 기준의 예:
git filter-repo --strip-blobs-bigger-than 10M
10M은 정리 조건의 예이지 Foundry가 정한 고정 커밋 한도가 아닙니다. 특정 경로를 제거하려면 실제 저장소 상대 경로를 제공합니다.
: "${FILE_TO_REMOVE:?FILE_TO_REMOVE is required}"
git filter-repo --path "$FILE_TO_REMOVE" --invert-paths
이름을 바꾼 파일의 옛 경로는 자동으로 따라가지 않으므로 필요한 모든 과거 경로를 포함해야 합니다. 여러 경로에는 --path를 여러 번 지정할 수 있습니다.
원격 반영
정리한 결과와 협업자 영향을 확인한 뒤 승인한 원격 ref만 갱신합니다. git-filter-repo는 안전을 위해 origin을 제거할 수 있으므로 원격 URL을 미리 기록합니다.
다음은 현재 HEAD가 반영하려는 정리된 브랜치이며 REMOTE_URL, TARGET_BRANCH와 재작성 전에 확인한 EXPECTED_REMOTE_COMMIT을 제공한 경우입니다. 예상 커밋은 원격에서 확인한 실제 값이어야 합니다.
: "${REMOTE_URL:?REMOTE_URL is required}"
: "${TARGET_BRANCH:?TARGET_BRANCH is required}"
: "${EXPECTED_REMOTE_COMMIT:?EXPECTED_REMOTE_COMMIT is required}"
git push \
"--force-with-lease=refs/heads/$TARGET_BRANCH:$EXPECTED_REMOTE_COMMIT" \
"$REMOTE_URL" "HEAD:refs/heads/$TARGET_BRANCH"
원격이 예상 커밋에서 바뀌었다면 이 갱신은 실패합니다. 다른 브랜치나 태그도 정리 대상이면 각각의 범위를 검토해야 하며 위 명령이 저장소의 모든 ref를 정리하는 것은 아닙니다. 협업자가 옛 이력을 다시 병합하거나 push하면 제거한 이력이 돌아올 수 있으므로 새 이력에 맞춰 작업 사본을 정리해야 합니다.
재발 방지에는 .gitignore에 실제 데이터 경로나 *.csv 같은 패턴을 추가합니다. IDE에서 숨김 파일을 표시해야 .gitignore를 볼 수 있습니다.
파일 업로드 또는 다운로드 오류
Shiny나 Streamlit 앱에 직접 다운로드 버튼을 붙이는 방식은 플랫폼의 다운로드 통제를 우회하므로 지원하지 않습니다. 작업공간에서 파일을 내려받으려면 먼저 Foundry 출력 데이터셋에 쓴 뒤 플랫폼의 다운로드 기능을 사용합니다. 사유 확인과 내보내기 한도 등 정책이 적용됩니다.
notebook 파일 로드 오류
브라우저에서 다운로드하거나 렌더링할 데이터의 한도를 넘으면 notebook을 열 때 오류가 생길 수 있습니다.
해당 파일의 셀 출력을 비워 다시 열 수 있습니다. NOTEBOOK_FILE에는 오류가 가리킨 실제 파일을 지정합니다. 이 명령은 notebook을 제자리에서 수정하고 차트를 포함한 모든 셀 출력을 삭제하므로 필요한 결과를 먼저 별도로 저장합니다.
: "${NOTEBOOK_FILE:?NOTEBOOK_FILE is required}"
jupyter nbconvert --clear-output --inplace "$NOTEBOOK_FILE"
출력을 지워도 코드와 입력 데이터의 보안/접근 권한을 바꾸는 것은 아닙니다.