jac(jinja-assets-compressor)在 AWS elasticbeanstalk 上的烧瓶应用程序中不起作用

Posted

技术标签:

【中文标题】jac(jinja-assets-compressor)在 AWS elasticbeanstalk 上的烧瓶应用程序中不起作用【英文标题】:jac (jinja-assets-compressor) not working in flask application on AWS elasticbeanstalk 【发布时间】:2016-08-03 16:05:55 【问题描述】:

我的本​​地 CentOS 7 开发堆栈上的烧瓶应用程序中的 jac 没有问题,但我无法将它部署到 AWS EB 实例:浏览器 GET 请求没有得到任何响应。

AWS EB /var/log/httpd/access_log 只是重复这行大约一百次:

127.0.0.1 (-) - - [12/Apr/2016:19:54:11 +0000] "GET / HTTP/1.1" 301 243 "-" "Python-urllib/2.7"

最后:

xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx) - - [12/Apr/2016:19:55:35 +0000] "GET / HTTP/1.1" 301 247 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0"

所以在 github jac 存储库中有一个 requirement.txt 如下:

Jinja2
beautifulsoup4==4.3.2
rjsmin==1.0.10
ordereddict==1.1
six==1.9.0

但我不必添加任何内容,因为以上所有行都包含在我从 pip freeze 获得的 requirements.txt 文件中。

我认为问题可能是缺少较少的库,因为我有一些 css 要压缩,所以我在 .ebextensions 中添加了以下内容:

commands:
01-install-nodejs-npm:
    command: yum install -y --enablerepo=epel nodejs npm
02-install-less:
    command: npm install -g less

但这并没有解决问题。

我不认为代码有什么问题,因为它适用于开发环境,但可以肯定的是,flaskApp init.py 中有以下几行:

app.config['COMPRESSOR_DEBUG'] = app.config.get('DEBUG')
app.config['COMPRESSOR_OUTPUT_DIR'] = './flaskApp/static/mydomain-dev'
app.config['COMPRESSOR_STATIC_PREFIX'] = '/static/mydomain-dev'
jac = JAC(app)

env = jinja2.Environment(extensions=[CompressorExtension])
env.compressor_output_dir = './flaskApp/static/mydomain-dev'
env.compressor_static_prefix = '/static/mydomain-dev'
#env.compressor_source_dirs = './flaskApp/staticLib/'

我被困在这一点上。

CentOS venv 应用程序和 AWS 应用程序之间的唯一区别是,由于该应用程序使用 flask_sslify,因此 AWS 上的每个请求都会重定向到 https(不是在 CentOS 中,因为如果 app.debug = True,flask_sslify 不会重定向)。

有什么想法吗?

【问题讨论】:

【参考方案1】:

您正在为烧瓶和 jinja 进行配置(单独使用时)。 删除这些行:

env = jinja2.Environment(extensions=[CompressorExtension])
env.compressor_output_dir = './flaskApp/static/mydomain-dev'
env.compressor_static_prefix = '/static/mydomain-dev'

然后让JAC(app) 配置它。 但是,JAC 不会发出任何 301,因为它不知道任何路线和东西(我需要检查代码,因为我有一段时间不检查它)。 该页面将您重定向到哪里?

【讨论】:

Jayson 感谢您的回答,与此同时,我一直在向 AWS EB 部署不同的尝试以使其正常工作:我删除了您建议的行,然后我尝试删除 flask_sslify 并使用也是一个普通的 /static/ 路径而不是我的 /flaskApp/static,但我无法让它工作。 我其实不知道 301 重定向到哪里。如何查看? @marcoe 很难说,向您的应用程序添加更多日志记录以检查它的去向。或者检查重定向指向的位置,也许您可​​以跟踪源。不是重定向用户进行身份验证吗? 不,一切都只是加载不需要身份验证的主页。我怀疑这个问题与 AWS 负载均衡器和/或 HTTPS 有关。最后两件事在某种程度上是相关的,因为事实证明不可能在 AWS 单一实例上部署一个带有 https 重定向的应用程序,而为了激活 HTTPS,我不得不创建一个负载均衡器(参见link。跨度> 所以只是为了测试问题是否与负载均衡器和/或 HTTPS 有关,我试图用 Flask_sslify 部署相同的应用程序,但请不要问我为什么,AWS 部署一直失败在单一实例或负载平衡实例上,我真的无法想象 AWS EB 有什么问题。因此,在这件事上花费的时间比我拥有的时间要多得多之后,我一无所知,目前我实际上正在寻找其他替代方案。

以上是关于jac(jinja-assets-compressor)在 AWS elasticbeanstalk 上的烧瓶应用程序中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

iptables配置

Hive 窗口函数

nat表的应用

CentOS7端口管理

Swift学习笔记-枚举和结构体

Python中的函数