매개변수 목록이 너무 깁니다. 컨테이너에 에코가 표시됩니다.

매개변수 목록이 너무 깁니다. 컨테이너에 에코가 표시됩니다.

컨테이너는 변수(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변수에서 확장된 텍스트가 실제로 너무 커서 커널 버퍼 에 맞지 않습니다.

중간 "에코 + 변수 + 쉘 리디렉션" 단계 없이 기본적으로 대상 파일에 직접 쓰도록 애플리케이션을 수정하는 것은 어떨까요?

관련 정보