0

Python requirements.txtを Elastic Beanstalk の PHP アプリケーションにインストールするのに非常に苦労しました。

最初は、複数のプラットフォームを Elastic Beanstalk (PHP/Python) にデプロイする機能に疑問を持っていました。これはそのままでは不可能ですが、.ebextentionsを介してプレインストール コマンドを実行することは可能です。

これにより、.ebextentions/install_python_requirements.configが作成されます。

container_commands:
  python_req:
    command: 'pip install -r /var/app/ondeck/requirements.txt'

問題は、現在lxml、要件の依存関係であり、展開プロセス中に一貫して失敗します。不思議なことsshに、EC2 インスタンスに直接接続すると、実行pip install -r requirements.txtは問題なく完了します。

直接アクセスによる依存関係のインストールは成功するのに、 およびsshを使用した展開中に失敗するのはなぜですか?eb deployinstall_python_requirements.config

/var/log/eb-activity.logの失敗

  creating build/temp.linux-x86_64-2.7/src/lxml
  gcc -pthread -fno-strict-aliasing -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -I/usr/include/libxml2 -I/tmp/pip-build-A6NhcA/lxml/src/lxml/includes -I/usr/include/python2.7 -c src/lxml/lxml.etree.c -o build/temp.linux-x86_64-2.7/src/lxml/lxml.etree.o -w
  gcc: error trying to exec 'cc1': execvp: No such file or directory
  error: command 'gcc' failed with exit status 1

  ----------------------------------------
  Command "/usr/bin/python2.7 -c "import setuptools, tokenize;__file__='/tmp/pip-build-A6NhcA/lxml/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-gSsRbZ-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-A6NhcA/lxml
   (ElasticBeanstalk::ExternalInvocationError)
4

1 に答える 1

2

結局のところ、問題はシステムにあり$PATHました。eb deployシステムパスが設定されていないようです。pip install展開プロセスでシステム PATH を使用できるため、開始できます。ただし、そのシステム PATH 変数はpipプロセスに渡されません。したがって、後続の pip の呼び出しが試行されると、アプリケーション パスが見つからないため失敗します。install_python_requirements.configにログを追加することで証明されるように

whome:      
  command: 'whoami'     
env:        
  command: '/bin/sh -c env'

次に、上記のログ コマンドの出力について/var/log/eb-activity.logを確認し、$PATH

これに対する解決策は、別の.ebextentions/var.configを介して PATH を手動で設定することでした

 option_settings:
   - option_name: PATH
     value: '/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/aws/bin:/root/bin'

これにより、requirements.txteb deployがプロセス中に正常に完了することができました。

于 2016-10-28T19:24:26.480 に答える