2012-09-20 65 views
12

tôi thời gian gần đây đã trở nên quen với cách làm như sau trong các dự án django của tôi để tôi có thể kiểm tra khả năng tương thích bowser trên nhiều hệ điều hành (ví dụ không linux):Django lỗi runserver khi xác định cổng

$ sudo ./manage.py runserver 0.0.0.0:80 

này cho phép tôi truy cập dự án thông qua bất kỳ máy nào trên mạng.

Tuy nhiên, tôi chỉ cần thiết lập một máy tính mới và các vấn đề lệnh này được lỗi sau:

Tôi hiểu django đó là gặp khó khăn trong việc tìm kiếm các mô-đun, những gì tôi không hiểu là đồng bằng cũ:

$ sudo ./manage.py runserver 

Chạy tốt. Tất cả những gì tôi đang làm ở đây là thay đổi cổng, chắc chắn? Và, tất nhiên, nó hoạt động tốt trong quá khứ.

N.B.
1. Tôi đang sử dụng Django 1.4
2. Tôi đã thử trong một virtualenv và trên hệ thống và tôi nhận được kết quả tương tự.
3. Tôi không có hệ thống cài đặt django rộng (chỉ trong virtualenvs)

Bất kỳ trợ giúp nào cũng sẽ được đánh giá cao.

+0

tôi không biết chính xác tại sao điều đó không hoạt động. Nó có hoạt động nếu bạn chạy './manage.py runserver 0.0.0.0: 8000' (tức là trên một cổng> 1024 không có sudo) – Eli

+0

Tôi gặp lỗi tương tự trên hệ thống và lỗi sau trong virtualenv:' Lỗi: Bạn không không có quyền truy cập vào cổng đó.' –

+0

Tính năng này có hoạt động không nếu bạn gọi nó bằng python: 'python manage.py runserver 0.0.0.0: 8000' –

Trả lời

18

Tôi đoán lệnh sudo sẽ chạy quy trình trong ngữ cảnh superuser và ngữ cảnh superuser thiếu cài đặt virtualenv.

Bạn có thể thử để gọi nhị phân python tại virtualenv của bạn một cách rõ ràng, ví dụ:

sudo $(which python) manage.py runserver 0.0.0.0:80 

Thực hiện một shell script để thiết lập virtualenv và gọi manage.py runserver, sau đó sudo kịch bản này thay thế.

#!/bin/bash 
source /home/darwin/.virtualenvs/foo/bin/activate 
cd /path/to/project/foo 
python manage.py runserver 0.0.0.0:80 

Thay /home/darwin/.virtualenvs/foo với thư mục gốc của virtualenv thực tế của bạn và /path/to/project/foo với thư mục gốc của dự án của bạn.

+0

Lưu ý rằng việc sử dụng sudo sẽ KHÔNG sử dụng python của môi trường cục bộ của bạn, thay vào đó nó sẽ sử dụng mặc định của hệ thống của bạn python (bạn có thể bỏ lỡ các gói yêu cầu của bạn) –

+1

@RishabhAgrahari thực sự, câu trả lời được cập nhật –

0

Chạy
manage.py runserver 0.0.0.0:8000
tức là. chạy các máy chủ tại cảng khác nhau và không phải là cổng mặc định 80
khi truy cập url sử dụng số cổng

6

Dưới đây là một giải pháp khác, thay vì tạo shell script, chỉ cần xác định những trăn thực thi bạn muốn sử dụng trong lệnh:

Giả sử chứa virtualenv của bạn được gọi .virtualenvs và có một env gọi myproject trong nó, đây là lệnh bạn phải viết:

$ sudo ~/.virtualenvs/myproject/bin/python manage.py runserver 0.0.0.0:80 
Các vấn đề liên quan