无法在弹性beanstalk上加载带有瓶子的静态文件

时间:2013-04-29 23:53:49

标签: python flask bottle elastic-beanstalk static-files

some help之后,我使用Elastic Beanstalk运行了我的瓶子应用程序。差不多 - 我还是看不到任何静态文件。我已按照说明here通过在目录.ebextensions中插入一个名为python.conf的文件,其中包含:

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

不幸的是,这不起作用。我的文件位于/ static下的文件夹中(例如,/ static / js,/ static / css等)。在我的瓶子应用程序中,我根据答案here提供静态文件,如下所示:

@route('/static/:path#.+#')
def server_static(path):
    return static_file(path, root='./static')

当我在本地运行它时,一切正常。有谁知道我做错了什么?我应该遵循不同的程序,因为我的静态文件在子文件夹中,或者因为我使用的是瓶而不是烧瓶?我知道a similar question已被问到烧瓶,但没有答案(据我所知,这可能是一个完全不同的问题)。 非常感谢,Alex

2 个答案:

答案 0 :(得分:1)

我确定这不是最优雅的解决方案,但我通过将所有静态文件放在S3存储桶中并在我的所有页面中使用它来解决这个问题。

我开始没有那么多静态文件,所以这不是什么大问题。我刚刚创建了一个S3 bucket url的变量:

S3Static = r'mystaticbucket.s3-us-west-2.amazonaws.com'

将其传递给我的瓶子模板,并更改了以下链接:

<link rel="stylesheet" type="text/css" href = "/static/css/MarmoStyle.css" >

<link rel="stylesheet" type="text/css" href = "{{S3Static}}/static/css/Style.css">

(即刚刚在路径前添加{{S3Static}}) 如果您像我一样在单独的%include标题模板中使用静态文件,则必须将S3Static变量传递给模板,如下所示:

%include header.tpl S3Static=S3Static

这就是它。我知道这对每个人来说都不是一个理想的解决方案,而且可能有更好的方法,但到目前为止它对我有用。 谢谢, 亚历

答案 1 :(得分:0)

你应该真正研究python的whitenoise模块。然后,您只需要更改一行,并且URL路由由瓶子旁边的whitenoise处理。基本上你可以保持网址与你的域名相同,即使whitenoise正在从其他地方撤出。 PLus它旨在缓存您的静态数据。绝对应该使用它。设置需要3行,您可以删除瓶子的静态文件夹路径。