2013-04-29 25 views
2

some help之後,我得到了使用Elastic Beanstalk運行的瓶子應用程序。差不多 - 我仍然看不到任何靜態文件。我跟隨在它插入目錄.ebextensions一個名爲python.conf文件,這說明here無法在彈性豆莖上加載帶有瓶子的靜態文件

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

+0

只是一個猜測,但你有沒有嘗試過使用絕對路徑而不是'root ='。/ static''中的相對路徑? – 2013-04-30 17:51:24

+0

嗯不,我沒有。說實話,我甚至不知道這個實例的靜態路徑是什麼,它顯然不同於我的本地副本。解決方案是將S3上的靜態文件託管嗎?我可以使用每個這些項目的唯一網址嗎?我想我必須回到所有的html並將其切換到S3地址,但在這一點上並不困難。 – 2013-04-30 21:22:06

回答

1

我確定這不是最優雅的解決方案,但我通過將所有靜態文件放入S3存儲桶並在我的所有頁面中使用該解決方案來解決此問題。

我真的沒有那麼多的靜態文件開始,所以它不是一個很大的交易。我剛纔提出的S3存儲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}}) 如果你使用一個單獨的%包含的頭模板靜態文件像我,你要在S3Static變量傳遞給這樣的模板:

%include header.tpl S3Static=S3Static

而且僅此而已。我知道這對於所有人來說都不是一個理想的解決方案,而且可能有更好的方法來完成它,但迄今爲止它對我來說都很有用。 謝謝, 亞歷克斯

0

你應該看看python的whitenoise模塊。然後,您只需要更改一行,而URL路由則通過旁邊的whitenoise進行處理。從本質上講,你可以保持url與你的域名一樣,即使whitenoise從別的地方拉了。 PLus它被設計來緩存你的靜態數據。絕對應該使用它。它需要3條線設置,並且您可以移除瓶子的靜態文件夾路線。