2013-02-25 30 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

一樣另一種選擇