パラメータリストが長すぎます。コンテナにエコーが表示されます。

パラメータリストが長すぎます。コンテナにエコーが表示されます。

コンテナは、変数(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変数内の拡張テキストが実際には大きすぎてカーネルバッファに収まらない。

中間の「エコ+変数+シェルリダイレクト」ステップなしで、デフォルトでターゲットファイルに直接書き込むようにアプリケーションを変更するのはどうですか?

関連情報