2012-10-27 113 views
25

我一直在嘗試幾天,在Amazon Web Services的Elastic Beanstalk下設置Django。我覺得我打的問題是這樣的一個:在AWS上設置Django Elastic Beanstalk:找不到WSGIPath

ERROR - Your WSGIPath refers to a file that does not exist. 

我跟着教程here和一切順利,直到第6步結束,但我不能爲我的生命得到任何其他顯示比第5步#2中的通用Elastic Beanstalk頁面要多。當我在我的本地機器上運行

./manage.py runserver 

,一切正常,因爲它應該,但我不能讓該頁面進行部署。我首先嚐試了一個我自己寫的小Django網站。它沒有工作,所以我刪除了我所做的一切,並再次嘗試,這沒有奏效,所以我刪除了所有這一切,並嘗試了一個新的django安裝。我嘗試了很多次,但是我想我錯過了一些重要的東西。

我添加了一個python.config文件,如this tutorial中所述。

這是我的文件結構:

-.git/ 
-.mysite/ 
    -myapp/ 
     -__init__.py 
     -models.py 
     -tests.py 
     -views.py 
    -mysite/ 
     -__init__.py 
     -settings.py 
     -urls.py 
     -wsgi.py 
    -.ebextensions/ 
     -python.config 
    -manage.py 
    -mysite.db 
    -requirements.txt 

從我的settings.py:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': 'mysite.db', 
     'USER': '', 
     'PASSWORD': '', 
     'HOST': '', 
     'PORT': '', 
    } 
} 

這裏的python.config:

container_commands: 01_syncdb:  
    command: "django-admin.py syncdb --noinput" 
    leader_only: true 

option_settings: 
    - namespace: aws:elasticbeanstalk:container:python 
     option_name: WSGIPath 
     value: mysite/wsgi.py 
    - option_name: DJANGO_SETTINGS_MODULE 
     value: mysite.settings 
    - option_name: AWS_SECRET_KEY 
     value: <This is my secret key> 
    - option_name: AWS_ACCESS_KEY_ID 
     value: <This is my access key> 

是否有另一個地方,我需要我的定義WSGIPath?有沒有辦法通過AWS控制檯執行它?我應該直接跳過EB並直接使用EC2嗎?

+6

此問題已經解決,詳細[這裏](https://forums.aws.amazon.com/thread.jspa?messageID=396656񠵰)。 我將所有的代碼存儲在一個目錄中,並且壓縮(並上傳)了整個目錄。我應該做的是將所有相關文件壓縮到該目錄中,而不是壓縮目錄本身,因此解壓縮時文件將全部位於該網站的根目錄中。希望這可以幫助其他人解決同樣的問題。我想我通過GUI和git遇到了同樣的問題。 – Xephryous

+2

你不應該編輯問題,而是添加你自己的答案並接受它。 – bikeshedder

+0

請注意,未提交的更改不會部署,因此您應該對「.ebextensions」文件夾進行所有更改,以便將其部署到EB CLI。 – nisevi

回答

13

https://forums.aws.amazon.com/thread.jspa?messageID=396656&#396656

的「.ebextensions」目錄必須是在你的應用程序的根級目錄,但是從日誌輸出,該目錄是不是在‘mysite的/ .ebextensions’目錄。因此,例如,在文檔以下Django的教程後,當你運行「混帳aws.push」你的根目錄應該是這樣的:

. 
├── .ebextensions 
│ └── python.config 
├── .elasticbeanstalk 
│ ├── config 
├── .git 
├── .gitignore 
├── manage.py 
├── mysite 
│ ├── __init__.py 
│ ├── settings.py 
│ ├── urls.py 
│ └── wsgi.py 
└── requirements.txt 

取而代之的是:

. 
└── mysite 
    ├── .ebextensions 
    ├── .elasticbeanstalk 
    ├── .git 
    ├── .gitignore 
    ├── manage.py 
    ├── mysite 
    └── requirements.txt 
+2

就是這個!我實際上在評論中回答了我自己的問題[here](http://stackoverflow.com/questions/13102076/setting-up-django-on-aws-elastic-beanstalk-wsgipath-not-found/17711770?iemail=1&noredirect = 1#comment17943273_13102076)。我認爲我沒有足夠的聲譽來回復當時或某事。無論如何,這個問題已經解決。 – Xephryous

+1

我們遇到了未安裝psycopg2的問題。將這些行添加到我們的.ebextensions/01-app.config文件中修復它: 程序包: yum: postgresql93-devel:[] –

8

查找.elasticbeanstalk/optionsettings.your-app-name在你的應用的根目錄。搜索WSGIPath並確保它是您打算的路徑。它看起來像默認爲application.py

+0

相關路徑是什麼?另外,'eb'腳本似乎會覆蓋我放在那裏的值。 – Mikhail

1

好吧,這是我嘗試了一百萬件事後爲我工作的。您必須運行eb update才能更新環境。

所以一定要確保.elasticbeanstalk/optionsettings.whatever-env有WSGIPath設置爲你希望它是什麼,並確保.ebextensions/whatever.config有這樣的:

option_settings: 
    - namespace: aws:elasticbeanstalk:container:python 
    option_name: WSGIPath 
    value: whatever/wsgi.py 

然後運行eb update應該工作。請記住,您必須設置別名以確保您的eb命令實際工作。例如:

alias eb="python2.7 ../AWS-ElasticBeanstalk-CLI-2.6.3/eb/linux/python2.7/eb" 
+1

我相信'eb update'最近已經變成'eb deploy'。這對2016年尋找這種信息的人有用:) – Vlad

1

我有同樣的問題(「你WSGIPath指的是不存在的文件」),終於找到了解決辦法:

注意:起初,我在錯誤的方向尋找,因爲EB也顯示此消息:生成過程中發生錯誤:命令01_migrate失敗。。所以我儘管這些文件,包括* .config,被正確定位。

2

在跟蹤AWS文檔到點後,我遇到了同樣的問題。我所做的避免它是通過EB CLI逐步初始化應用程序,而不使用AWS文檔指示的命令(〜/ ebdjango $ eb init -p python2.7 django-tutorial),並逐步創建環境以及。我參加了EB CLI的步驟如下:

  1. 初始化應用
    1. eb init
    2. 選擇默認區域
    3. 輸入應用程序名稱(使用默認按enter)
    4. 確認我正在使用Python
    5. 選擇的Python版本與我的本地環境兼容
    6. 設置SSH
  2. 創建環境
    1. eb create
    2. 輸入環境名稱
    3. 輸入DNS CNAME前綴(按使用的默認輸入)(按enter使用默認值)
    4. 選擇負載平衡器類型(我通過輸入1選擇經典)

環境創建後我用eb config打開EB的配置文件,以確認路徑到我的WSGI是它應該是什麼:

aws:elasticbeanstalk:container:python: 
    NumProcesses: '1' 
    NumThreads: '15' 
    StaticFiles: /static/=static/ 
    WSGIPath: path/to/wsgi.py 

如果作出任何改變,一定要保存的文件和通過在您的終端中輸入eb open來確認所有內容均已平鋪,以使用前面步驟中指定的域名打開瀏覽器窗口。