2013-02-25 47 views
10

如何获得aws弹性豆茎来识别烧瓶应用程序中的静态资产?我做了标准/.ebextensions/python.config夫妇YAML线一拉:静态资产不会显示在弹性豆杆上的烧瓶

option_settings: 
    "aws:elasticbeanstalk:container:python:staticfiles": 
    "/static/": "static/" 

我所有的电话在模板资产被包裹在“{{url_for(‘静’,文件名='IMG/office.jpg')}}“键入东西。

但没有图像,样式或JavaScript显示在页面加载。这里是一个示例日志文件404. IP - [25/Feb/2013:21:48:13 +0000]“GET /static/css/bootstrap.css HTTP/1.1”404 328“http://xyz.elasticbeanstalk.com/

我错过了明显的东西吗?一切都运行在我的地方,只是静态的资产很大的不负载有一次,我的git aws.push

+0

我有同样的问题米,除了瓶子。我有一堆子文件夹在/静态,所以在瓶子里我有一个路由,说'@路由('/静态/:路径#。+#')',它工作正常,但我不能让它在豆茎工作。希望有人对我们有一个答案! – 2013-04-29 04:32:05

回答

6

我不知道,你把你的静态文件,但由于矿井通常在app/static,我有:

[aws:elasticbeanstalk:container:python:staticfiles] 
/static/=app/static/ 
/favicon.ico=app/static/favicon.ico 

[aws:elasticbeanstalk:container:python] 
StaticFiles=/static/=app/static/,/favicon.ico=app/static/favicon.ico 

这两个部分似乎都很重要。 (后者的部分中有其他的东西太多,但我已经离开了这一点。)其实我有两个资源的路径在这里,无论是/static/目录和顶级/favicon.ico文件哑巴老的浏览器总是要求。

+2

'/ static/= app/static /'为我做了。天才,我是'/静态/ =静态/'直接从教程。感谢您结束漫长的搜索:) – Felix 2013-09-16 03:35:09

+1

@nissemand:这仍然是一个有效的解决方案。我无法让它工作。我假设我需要做的是转到AWS环境的管理页面,选择“软件配置”面板,并将虚拟路径'/ static /'的目录从'static /'更改为'xyz/static /',其中'xyz'是我的项目中包含我的web应用程序包的文件夹(对应于'app',这里)。这是正确的(因为它不起作用)? – orome 2015-01-11 23:41:11

+0

对于我的生活,我无法得到这个工作。我正在EB上运行金字塔应用程序。有人有建议吗?以下是我提出的问题的链接:https:// stackoverflow。com/questions/47046273/static-files-for-pyramid-application-on-elastic-beanstalk – 2017-11-01 23:00:36

3

在撰写本文时,花费很多时间与AWS EB的config战斗后,我放弃了试图使静态文件的工作,我们都期望的方式和更新了我的瓶的应用程序创建到:

app = Flask(__name__, static_url_path='/s') 

这呈现像/s/scripts/my-script.js这样的网址,并且由于我总是在我的代码和模板中使用url_for('static', ...),所以所有事情都可以在AWS之外继续工作。

更新于9/30/2013:我几乎可以保证在AWS EB的Python容器中完全忽略staticFiles设置。

我上面建议的变化具有路由通过烧瓶内静态文件请求的不良缺点(也许更准确地说,WSGI。)这是不是很难解决,虽然。

在项目根目录下创建一个Apache conig文件,命名为APP-的httpd.conf

Alias /s /opt/python/current/app/static 
<Directory /opt/python/current/app/static> 
Order allow,deny 
Allow from all 
</Directory> 

这个配置告诉Apache接管任何请求开始/s网址,相同的前缀我们选择我们的静态文件,并从我们的应用程序的静态文件夹中提供文件。

.ebextensions /定制apache.config创建这个文件:

container_commands: 
    add_apache_conf: 
    command: "cp app-httpd.conf /etc/httpd/conf.d" 

该文件将应用程序部署过程中使用,并将在新的config文件复制到目录从Apache是配置为加载它看到的所有.config文件。

+0

[.ebextensions/* .config'文件和'.elasticbeanstalk/optionsettings。*'文件](http ://stackoverflow.com/q/27907203/656912)? – orome 2015-01-12 17:09:15

+0

据我了解,**。elasticbeanstalk **目录为您的项目保留本地设置。这些设置被'eb'命令行工具使用,包括当你运行'git aws.push'时。我个人停止使用这些工具,并使用他们的API编写我自己的脚本。就我而言,对于Python,我使用Boto包。 ** .ebextensions **中的内容在部署或更新时会包含在您的应用中。它包含将在部署时在您的应用程序服务器中执行的设置或命令。 – sergiopereira 2015-01-12 22:19:37

0

我有一个类似的问题,其中奇怪的是,static/img/的所有文件都被提供,但static/css/static/js/中的任何内容都没有被提供。

为了解决这个问题我从烧瓶源的根目录打开.elasticbeanstalk/optionsettings.app-env和编辑的代码块是

[aws:elasticbeanstalk:container:python] 
NumProcesses=1 
NumThreads=15 
StaticFiles=/static/.*= 
WSGIPath=application.py 

[aws:elasticbeanstalk:container:python:staticfiles] 

注意StaticFiles其实需要一个正则表达式,所以在/static/.*.*允许任何路径后/static/

+0

[.ebextensions/*。config'文件和'.elasticbeanstalk/optionsettings。*'文件](http://stackoverflow.com/q/27907203/656912)之间的关系是什么? – orome 2015-01-12 17:09:48

0

我发现解决这个问题的一个奇怪的事情是编辑我的.gitignore文件。它包括删除/ dist文件夹,其中包括我的CSS生成的dist文件夹。所以当我部署时,css文件实际上是缺少的。

希望这可以帮助任何人在同一条船上。

0

4+年后的今天,我能够获得静态文件利用工作:

(文件:.ebextensions/WHATEVER_NAME.config

option_settings: 
    - namespace: aws:elasticbeanstalk:container:python 
    option_name: StaticFiles 
    value: /static/=PATH/FROM/MY/APP/BASE/DIR/TO/STATIC/DIR/ 

...在我的情况,这是

value: /static/=distrib/static/ 

我发现改变我的

app = Flask(__name__) 

app = Flask(__name__, static_url_path='/static') 

既不必要也不足够。当我只设置static_url_path而不是StaticFiles时,它不起作用;当我设置StaticFiles而不是static_url_path时,它工作正常。

<讽刺> Elastic Beanstalk非常简单,记录完备! < /嘲讽>

0

它也可以做到通过弹性魔豆面板:

配置 - >软件配置 - >静态文件

然后

enter image description here

一样另一种选择