25

Tôi đã cố gắng vài ngày nay để thiết lập Django dưới cây đàn hồi của dịch vụ Web Amazon '. Tôi nghĩ rằng vấn đề tôi đang đánh là một trong những điều này:Thiết lập Django trên AWS Cây đậu đàn hồi: WSGIPath không tìm thấy

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

Tôi làm theo các hướng dẫn here và mọi việc suôn sẻ cho đến khi kết thúc Bước 6, nhưng tôi không thể cho cuộc sống của tôi có được bất cứ điều gì để hiển thị khác so với trang Elastic Beanstalk chung từ Bước 5, # 2. Khi tôi chạy

./manage.py runserver 

trên máy cục bộ, mọi thứ vẫn hoạt động, nhưng tôi không thể triển khai trang đó. Lần đầu tiên tôi thử với một trang web Django nhỏ tôi đã viết bản thân mình. Nó không hoạt động, vì vậy tôi đã xóa tất cả mọi thứ tôi đã làm và thử lại, điều đó không có tác dụng, vì vậy tôi đã xóa tất cả những điều đó và thử lại bằng cài đặt django mới. Tôi đã thử một vài lần không thích thú với những điều nhỏ nhặt, nhưng tôi nghĩ tôi thiếu một thứ gì đó quan trọng.

Tôi đã thêm tệp python.config như được mô tả trong this tutorial.

Dưới đây là cấu trúc tập tin của tôi:

-.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 

Từ settings.py của tôi:

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

Dưới đây là 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> 

Có một nơi khác tôi cần phải xác định của tôi WSGIPath? Có cách nào để làm điều đó thông qua giao diện điều khiển AWS? Tôi có nên bỏ qua EB hoàn toàn và sử dụng EC2 trực tiếp không?

+6

Vấn đề này đã được giải quyết chi tiết [ở đây] (https://forums.aws.amazon.com/thread.jspa?messageID=396656񠵰). Tôi đã lưu trữ tất cả mã trong một thư mục và tôi đã nén (và tải lên) toàn bộ thư mục đó.Những gì tôi nên làm là nén tất cả các tệp có liên quan trong thư mục đó thay vì thư mục, vì vậy khi giải nén tất cả các tệp sẽ nằm trong thư mục gốc của trang. Hy vọng điều này sẽ giúp người khác với cùng một vấn đề. Tôi nghĩ rằng tôi chạy vào cùng một vấn đề tải lên thông qua GUI và thông qua git. – Xephryous

+2

Bạn không nên chỉnh sửa câu hỏi nhưng thêm câu trả lời của riêng bạn và chấp nhận câu hỏi đó. – bikeshedder

+0

Xin lưu ý rằng những thay đổi không được cam kết sẽ không được triển khai, vì vậy bạn nên có tất cả các thay đổi của bạn trên thư mục ".ebextensions" được cam kết để triển khai nó với EB CLI. – nisevi

Trả lời

13

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

Các ".ebextensions" thư mục phải nằm trong thư mục cấp gốc của ứng dụng của bạn, nhưng từ dữ liệu ghi nhận, thư mục là thay vì trong '/ .ebextensions mysite' thư mục. Vì vậy, ví dụ, sau khi làm theo hướng dẫn django trong các tài liệu khi bạn chạy "git aws.push" thư mục gốc của bạn sẽ trông như thế này:

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

Thay vì điều này:

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

Đó là một! Tôi thực sự đã trả lời câu hỏi của riêng tôi trong một nhận xét [ở đây] (http://stackoverflow.com/questions/13102076/setting-up-django-on-aws-elastic-beanstalk-wsgipath-not-found/17711770?iemail=1&noredirect = 1 # comment17943273_13102076). Tôi nghĩ rằng tôi không có đủ danh tiếng SO để trả lời vào thời điểm đó hoặc một cái gì đó. Dù sao, vấn đề được giải quyết. – Xephryous

+1

Chúng tôi đã gặp sự cố với psycopg2 chưa được cài đặt. thêm các dòng đó vào tệp .ebextensions/01-app.config cố định của nó: gói: yum: postgresql93-devel: [] –

8

Tìm .elasticbeanstalk/optionsettings.your-app-name trong thư mục gốc của ứng dụng của bạn. Tìm kiếm WSGIPath và đảm bảo đó là con đường bạn dự định. Dường như nó mặc định là application.py.

+0

Đường dẫn liên quan đến là gì? Ngoài ra, tập lệnh 'eb' dường như vẫn ghi đè giá trị mà tôi đặt vào đó. – Mikhail

1

Ok, đây là những gì đã hiệu quả đối với tôi sau khi thử hàng triệu thứ. Bạn phải chạy eb update để cập nhật môi trường.

Vì vậy, hãy chắc chắn .elasticbeanstalk/optionsettings.whatever-env có WSGIPath thiết lập với những gì bạn muốn nó, và chắc chắn rằng .ebextensions/whatever.config có này:

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

Sau đó chạy eb update và nó nên làm việc. Hãy nhớ rằng bạn phải đặt bí danh để đảm bảo lệnh eb của bạn thực sự hoạt động.Ví dụ:

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

Tôi tin rằng 'eb update' đã thay đổi thành' eb deploy' gần đây. Điều này có thể hữu ích cho những người tìm kiếm loại thông tin này trong năm 2016 :) – Vlad

1

tôi đã cùng một vấn đề ("WSGIPath bạn đề cập đến một tập tin mà không tồn tại"), và cuối cùng tìm ra giải pháp:

Lưu ý: Lúc đầu, tôi đang tìm kiếm sai hướng, vì EB cũng đang hiển thị thông báo này: Lỗi xảy ra trong khi xây dựng: Lệnh 01_migrate không thành công.. Vì vậy, tôi mặc dù các tập tin, bao gồm cả * .config, đã được định vị chính xác.

2

Tôi gặp vấn đề tương tự sau khi theo dõi tài liệu của AWS tới dấu chấm. Những gì tôi đã làm để tránh nó đã được khởi tạo một ứng dụng thông qua các bước EB CLI bước, mà không cần sử dụng lệnh các tài liệu AWS hướng dẫn (~/ebdjango $ eb init-p python2.7 django-hướng dẫn), và tạo ra một bước môi trường bước cũng. Các bước tôi đã trong EB CLI như sau:

  1. Initialize Application
    1. eb init
    2. Chọn một khu vực mặc định
    3. Nhập Tên ứng dụng (được sử dụng mặc định bằng cách nhấn enter)
    4. Xác nhận rằng tôi đang sử dụng Python
    5. Phiên bản Python đã chọn tương thích với môi trường địa phương của tôi
    6. Thiết lập SSH
  2. Tạo môi trường
    1. eb create
    2. Nhập Tên Môi trường (được sử dụng mặc định bằng cách nhấn enter)
    3. Nhập DNS CNAME tiền tố (được sử dụng mặc định bằng cách nhấn enter)
    4. Chọn loại cân bằng tải (Tôi đã chọn kiểu cổ điển bằng cách nhập 1)

Sau Môi trường được tạo ra tôi sử dụng eb config để mở tập tin cấu hình EB để xác nhận rằng đường dẫn đến WSGI của tôi là những gì nó nên là:

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

Nếu bất kỳ thay đổi được thực hiện, chắc chắn rằng bạn lưu các tập tin và xác nhận rằng mọi thứ được bình phương bằng cách nhập eb open trong thiết bị đầu cuối của bạn để mở cửa sổ trình duyệt bằng cách sử dụng tên miền được chỉ định trong các bước trước đó.

Các vấn đề liên quan