为什么会出现ElasticBeanstalk :: ExternalInvocationError? [英] Why I get ElasticBeanstalk::ExternalInvocationError?
问题描述
我的应用程序是基于RubyOnRails构建的,并使用乘客将其部署为弹性beantalk应用程序,我正在尝试向nginx服务器添加标头并重新启动它,这是我的配置文件,它是来自aws elastic beanstalk中.ebextensions文件夹的脚本:
My app is built on RubyOnRails and its deployed as an elastic beanstalk app using passenger, I am trying to add headers to nginx server and restart it, here is my config file, a script from .ebextensions folder in aws elastic beanstalk:
packages:
yum:
nginx: []
files:
"/etc/nginx/conf.d/webapp.conf" :
mode: "000644"
owner: root
group: root
content: |
server {
location /assets {
alias /var/app/current/public/assets;
gzip_static on;
gzip on;
expires max;
add_header Cache-Control public;
}
location /public {
alias /var/app/current/public;
gzip_static on;
gzip on;
expires max;
add_header Cache-Control public;
}
}
# This reloads the server, which will both make the changes take affect and makes sure the config is valid when you deploy
container_commands:
01_reload_nginx:
command: "sudo service nginx reload"
但是我遇到了这个错误:
However I got this error:
[2017-12-13T06:23:48.635Z] ERROR [17344] : Command CMD-AppDeploy failed!
[2017-12-13T06:23:48.635Z] INFO [17344] : Command processor returning results:
{"status":"FAILURE","api_version":"1.0","results":[{"status":"FAILURE","msg":"container_command 01_reload_nginx in .ebextensions/01_elastic_beanstalk_webapp.config failed. For more detail, check /var/log/eb-activity.log using console or EB CLI","returncode":7,"events":[]}]}
/var/log/eb-activity.log:
/var/log/eb-activity.log:
[2017-12-13T06:23:48.584Z] INFO [17344] - [Application update fix-command-nginx-reload-hope@2/AppDeployStage0/EbExtensionPostBuild/Infra-EmbeddedPostBuild/postbuild_0_myapp_website/Command 01_reload_nginx] : Starting activity...
[2017-12-13T06:23:48.619Z] INFO [17344] - [Application update fix-command-nginx-reload-hope@2/AppDeployStage0/EbExtensionPostBuild/Infra-EmbeddedPostBuild/postbuild_0_myapp_website/Command 01_reload_nginx] : Activity execution failed, because: (ElasticBeanstalk::ExternalInvocationError)
[2017-12-13T06:23:48.619Z] INFO [17344] - [Application update fix-command-nginx-reload-hope@2/AppDeployStage0/EbExtensionPostBuild/Infra-EmbeddedPostBuild/postbuild_0_myapp_website/Command 01_reload_nginx] : Activity failed.
尽管如果我ssh进入实例并执行 sudo service nginx reload
,它将正常执行.有什么主意吗?
although if I ssh into the instance and execute sudo service nginx reload
it will be executed normally..
Any idea?
编辑
$ cat /proc/version
Linux version 4.9.43-17.39.amzn1.x86_64 (mockbuild@gobi-build-64011) (gcc version 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC) ) #1 SMP Fri Sep 15 23:39:41 UTC 2017
部署命令:
eb deploy my-app -v
请求资产的标题:
Connection: keep-alive
Content-Encoding: gzip
Content-Type: application/x-javascript
Date: Fri, 24 Aug 2018 11:03:50 GMT
ETag: W/"12cd8ea0-20db3"
Last-Modified: Mon, 31 Dec 1979 04:08:00 GMT
Server: nginx/1.12.1
Transfer-Encoding: chunked
Via: 1.1 8cc9957dff77c27e9931ab0aaf344ec9.cloudfront.net (CloudFront)
X-Amz-Cf-Id: 0NlE-FiGgzczadHYeK7HMMsDsGRmaB8Sefvo89phHWw3LSx01t5rgQ==
X-Cache: Miss from cloudfront
缺少标题:
access-control-max-age: 3000
age: 48214
服务器上的更新conf文件
$ cat /etc/nginx/conf.d/webapp.conf
server {
location /assets {
alias /var/app/current/public/assets;
gzip_static on;
gzip on;
expires max;
add_header Cache-Control public;
add_header 'Access-Control-Allow-Origin' '*';
}
location /public {
alias /var/app/current/public;
gzip_static on;
gzip on;
expires max;
add_header Cache-Control public;
add_header 'Access-Control-Allow-Origin' '*';
}
}
编辑
服务nginx configtest
结果:
$ sudo service nginx configtest
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
推荐答案
命令:"sudo service nginx reload"
是不必要的,因为NGINX服务在每次成功部署后都会自动重新启动.您可以将其从配置文件中删除.
command: "sudo service nginx reload"
is not necessary as NGINX service restarts automatically after every successful deployment. You can remove it from your config file.
您可能会在CDN服务到期方面遇到延迟,尝试刷新其缓存或直接针对EB网址进行测试.
You maybe experiencing a delay in the expiration of your CDN service, try flushing it's cache or testing against the EB url directly.
这篇关于为什么会出现ElasticBeanstalk :: ExternalInvocationError?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!