컨테이너는 변수(index_render)에 저장하고 파일에 추가하는 거대한 문자열(얼마나 큰지 확실하지 않음)을 생성하는 Ruby 애플리케이션을 실행하고 있습니다.
system("echo '#{index_render}' > temp/temp.html")
그런데 점점 더 많아지네요Errno::E2BIG: [!] Argument list too long - echo
내가 사용하고 있는 alpine/bundle:2.7.2 컨테이너는 Ruby 애플리케이션을 실행하고 애플리케이션 내부에서 Ruby는 노드 애플리케이션을 호출합니다. 따라서 alpine/bundle:2.7.2 이미지에서 nvm, node 등을 init 스크립트(예: 구성 스크립트)로 설치했습니다.
init 스크립트를 사용하여 크기를 늘릴 수 있는 방법이 있습니까? Ruby 애플리케이션을 수정할 권한이 없기 때문입니다.
답변1
system()
이는 많은 언어에서 기본적으로 실제 셸을 통해 호출이 이루어지기 때문입니다 /bin/sh
.
여러 가지 문제가 있을 수 있습니다:
- 변수의 텍스트에는
'
문자가 여러 번 포함되어 있어'
인수 수가 소진될 때까지 변수를 여러 개의 작은 비트로 래핑 합니다. - 변수에서 확장된 텍스트가 너무 커서 Shell 호출에서 구문 분석할 수 없으므로
system()
이 오류로 인해 Shell이 종료됩니다. argv
변수에서 확장된 텍스트가 실제로 너무 커서 커널 버퍼 에 맞지 않습니다.
중간 "에코 + 변수 + 쉘 리디렉션" 단계 없이 기본적으로 대상 파일에 직접 쓰도록 애플리케이션을 수정하는 것은 어떨까요?