Django ngừng hoạt động với RuntimeError: populate () not reentrant


123

Tôi đang phát triển một ứng dụng web Django được triển khai trên máy chủ Apache với WSGI và mọi thứ diễn ra suôn sẻ. Hôm nay, tôi đã thực hiện một số thay đổi nhỏ đối với ứng dụng của mình admin.pytrong nỗ lực tùy chỉnh giao diện Quản trị viên Django cài sẵn và ban đầu đã mắc lỗi cú pháp (dấu ngoặc đơn không được đóng). Điều này có nghĩa là khi tôi chạm wsgi.pyvà tải mã (tôi có WSGI đang chạy ở chế độ daemon trên máy chủ ảo của mình), trang web của tôi đã bị thay thế bằng Lỗi máy chủ nội bộ do WSGI dừng khi gặp lỗi cú pháp.

Vì vậy, tôi đã sửa lỗi cú pháp, kiểm tra xem tôi không còn lỗi nào nữa manage.py checkvà chạm vào wsgi.pyđể triển khai lại. Nhưng trang web của tôi vẫn hiển thị Lỗi máy chủ nội bộ! Kiểm tra nhật ký Apache, đây là những gì tôi thấy:

[Sun Nov 23 13:52:46 2014] [info] mod_wsgi (pid=19093): Create interpreter 'quotes.cs.cornell.edu|'.
[Sun Nov 23 13:52:46 2014] [info] mod_wsgi (pid=19093): Adding '/extra/www/html/quotes/quotes_django' to path.
[Sun Nov 23 13:52:46 2014] [info] mod_wsgi (pid=19093): Adding '/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/' to path.
[Sun Nov 23 13:52:46 2014] [info] [client 128.84.33.19] mod_wsgi (pid=19093, process='quotes.cs.cornell.edu',
  application='quotes.cs.cornell.edu|'): Loading WSGI script '/extra/www/html/quotes/quotes_django/quotes_django/
wsgi.py'.
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] mod_wsgi (pid=19093): Target WSGI script '/extra/www/html/
quotes/quotes_django/quotes_django/wsgi.py' cannot be loaded as Python module.
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] mod_wsgi (pid=19093): Exception occurred processing WSGI
script '/extra/www/html/quotes/quotes_django/quotes_django/wsgi.py'.
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] Traceback (most recent call last):
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]   File "/extra/www/html/quotes/quotes_django/
quotes_django/wsgi.py", line 14, in <module>
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]     application = get_wsgi_application()
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]   File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/core/wsgi.py", line 14, in get_wsgi_application
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]     django.setup()
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]   File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/__init__.py", line 21, in setup
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]     apps.populate(settings.INSTALLED_APPS)
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]   File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/apps/registry.py", line 115, in populate
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]     app_config.ready()
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]   File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/contrib/admin/apps.py", line 22, in ready
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]     self.module.autodiscover()
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]   File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/contrib/admin/__init__.py", line 23, in autodiscover
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]     autodiscover_modules('admin', register_to=site)
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]   File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/utils/module_loading.py", line 74, in autodiscover_modules
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]     import_module('%s.%s' % (app_config.name,         
module_to_search))
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]   File "/usr/lib64/python2.7/importlib/__init__.py", line 
37, in import_module
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]     __import__(name)
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]   File "/extra/www/html/quotes/quotes_django/quotespage/
admin.py", line 25
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]     approve_quotes.short_description = "Approve selected
quotes"
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]                  ^
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] SyntaxError: invalid syntax
[Sun Nov 23 13:53:36 2014] [info] [client 128.84.33.19] mod_wsgi (pid=19093, process='quotes.cs.cornell.edu',
  application='quotes.cs.cornell.edu|'): Loading WSGI script '/extra/www/html/quotes/quotes_django/quotes_django/
wsgi.py'.
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] mod_wsgi (pid=19093): Target WSGI script '/extra/www/html/
quotes/quotes_django/quotes_django/wsgi.py' cannot be loaded as Python module.
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] mod_wsgi (pid=19093): Exception occurred processing WSGI
script '/extra/www/html/quotes/quotes_django/quotes_django/wsgi.py'.
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] Traceback (most recent call last):
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19]   File "/extra/www/html/quotes/quotes_django/         
quotes_django/wsgi.py", line 14, in <module>
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19]     application = get_wsgi_application()
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19]   File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/core/wsgi.py", line 14, in get_wsgi_application
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19]     django.setup()
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19]   File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/__init__.py", line 21, in setup
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19]     apps.populate(settings.INSTALLED_APPS)
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19]   File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/apps/registry.py", line 78, in populate
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19]     raise RuntimeError("populate() isn't reentrant")
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] RuntimeError: populate() isn't reentrant

Loạt lỗi đầu tiên cho thấy WSGI không thành công do lỗi cú pháp trong của tôi admin.py. Tuy nhiên, loạt lỗi thứ hai dường như cho thấy một lỗi bên trong Django:

RuntimeError: populate() isn't reentrant

ném từ populatephương pháp của registry.py.

Googling thông báo lỗi này trả về ít thông tin đáng ngạc nhiên, không có thông tin nào từ tài liệu Django. Rõ ràng, đôi khi nó có thể xảy ra nếu bạn đặt tên một ứng dụng hai lần trong của bạn settings.py, nhưng tôi không làm vậy. Quan trọng hơn, tôi đã không thay đổi settings.pykể từ thời điểm trang web hoạt động tốt - điều duy nhất tôi thay đổi là admin.py.

Tôi đã thử hoàn nguyên tất cả các thay đổi mà tôi đã thực hiện, vì vậy tất cả mã Python của tôi trở lại trạng thái như khi trang web đang hoạt động - và tôi vẫn gặp populate() isn't reentrantlỗi khi cố gắng thực hiện WSGI tải lại mã!

Tôi cũng đã thử nhận xét các ứng dụng khác nhau trong phần INSTALLED_APPS của settings.pyvà ngay cả khi chỉ bật 'django.contrib.staticfiles', lỗi vẫn xảy ra. Thật kỳ lạ, tôi vẫn gặp lỗi ngay cả khi tôi nhận xét tất cả các ứng dụng - Django xử lý lỗi ngay cả khi nó không tải bất kỳ ứng dụng nào!

Có ai biết chuyện gì đang xảy ra ở đây không? Hoặc bất kỳ cách nào tốt hơn để tôi gỡ lỗi này, vì quá trình truy xuất trong nhật ký Apache khá vô ích?

Lưu ý: Tôi đang sử dụng Django 1.7, Apache 2.2 và Python 2.7.


2
Tôi sẽ thử xóa tất cả các tệp .pyc có thể tồn tại.
tước

Không, xóa tất cả các tệp .pyc không giúp được gì. Việc chạm vào wsgi.pydẫn đến cùng một lỗi Apache và các tệp .pyc không được tạo lại.
Edward

1
Bạn đã thử khởi động lại Apache chưa?
tước

Tôi không thể khởi động lại Apache vì tôi không có quyền trên máy chủ này. Quản trị viên có quyền truy cập root sẽ không trở lại văn phòng cho đến Thứ Hai.
Edward

Trong trường hợp của tôi, nó không được cài đặt ứng dụng từ INSTALLED_APPS trong môi trường.
maciek

Câu trả lời:


99

Điều này là do lỗi trong cài đặt Django của bạn ở đâu đó. Thật không may, Django đã che giấu lỗi đằng sau thông báo lỗi chung chung và không hữu ích này.

Để tiết lộ sự cố thực sự, hãy mở django/apps/registry.pyvà xung quanh dòng 80, thay thế:

raise RuntimeError("populate() isn't reentrant")

với:

self.app_configs = {}

Điều này sẽ cho phép Django tiếp tục tải và hiển thị lỗi thực sự.

Tôi đã gặp lỗi này vì một số nguyên nhân khác nhau. Một lần là do tôi nhập sai một trong các admin.py của ứng dụng của tôi.


22
Đây là câu trả lời hữu ích nhất trong chủ đề này. Bây giờ tôi biết ->django.core.exceptions.ImproperlyConfigured: psycopg2_version 2.5.4 or newer is required; you have 2.5 (dt dec pq3 ext)
RickyA

2
Cứu cuộc đời tôi. Giải pháp này cho phép tôi kiểm tra thành công các yêu cầu còn thiếu và lỗi tương thích giữa chúng.
Ángel Jiménez

1
Điều này là hoàn hảo. Thay đổi một dòng đó cho tôi thấy tôi đã gặp một lỗi nhập đơn giản. Tôi không thể biết chuyện gì đã xảy ra trước đó.
James

4
Câu trả lời này là vàng nguyên chất.
xpanta

2
@RickyA và đây là nhận xét hữu ích nhất cho đến nay vì tôi thậm chí không phải bận tâm đến câu trả lời này và chỉ cần thử pip install --upgrade psycopg2và điều đó đã sửa nó.
Người dùng

65

Quản trị viên máy chủ của tôi đã khởi động lại Apache và điều đó đã khắc phục sự cố này một cách kỳ diệu. Các tệp Python giống hệt nhau được tải mà không gây ra populate() isn't reentrant. Tôi thậm chí đã thử tải một tệp khác có lỗi cú pháp, sau đó sửa nó và máy chủ đã có thể tải tệp mới và chạy chính xác mà không có vấn đề gì.

Tôi vẫn không biết điều gì đã xảy ra, nhưng tôi đánh dấu điều này là đã được trả lời vì sự cố đã biến mất. (Chà, tôi sẽ đánh dấu nó là câu trả lời ngay khi StackOverflow cho phép tôi chấp nhận câu trả lời của riêng mình.)

Cập nhật : Sau khi tiếp tục gặp lỗi này khi tôi vô tình tải lên Python có lỗi cú pháp, tôi đã tìm ra cách giải quyết dễ dàng hơn là khởi động lại Apache. Khi WSGI bắt đầu populate() isn't reentrantgặp lỗi, tôi thay thế dự án Django của mình wsgi.pybằng chức năng đơn giản sau:

def application(environ, start_response):
    if environ['mod_wsgi.process_group'] != '': 
        import signal
        os.kill(os.getpid(), signal.SIGINT)
    return ["killed"]

Sau đó, tôi tải lại trang web của mình và quá trình daemon WSGI khởi động lại (tôi có thể biết bằng cách nhìn vào nhật ký Apache, mặc dù trang web vẫn hiển thị cùng một lỗi 500).

Nếu sau đó tôi thay đổi wsgi.pytrở lại bình thường và tải lại, WSGI sẽ lấy mã của tôi thành công mà không cần ném populate() isn't reentrant(giả sử lần này tôi không có lỗi cú pháp). Vì vậy, toàn bộ Apache không cần phải khởi động lại, chỉ cần quá trình WSGI và tôi có thể làm điều đó mà không cần quyền root.


8
Đối với tôi, vấn đề không nằm ở việc di chuyển những thay đổi tôi đã thực hiện sang một mô hình trong một trong các ứng dụng của mình.
user2662692

Ok, tôi đang gặp phải vấn đề gần như tương tự và vâng, nó đã được khắc phục khi khởi động lại máy và khởi động lại máy chủ. Nhưng vấn đề cứ lặp đi lặp lại. Đôi khi đột ngột. trong vòng một tháng nó đã xảy ra ba lần. Nếu ai có bất kỳ ý tưởng, xin vui lòng giúp đỡ.
Rohit

@Rohit, nếu bạn muốn được trợ giúp về tình huống của mình, có lẽ bạn nên đăng một câu hỏi mới mô tả nó. Bạn không chắc sẽ nhận được câu trả lời trong các bình luận ở đây.
Edward

4
Có một startup-timeouttùy chọn cho chế độ daemon của mod_wsgi trong các phiên bản mod_wsgi gần đây hơn, hỗ trợ khôi phục các lỗi thoáng qua khi Django đang được khởi tạo, chẳng hạn như cơ sở dữ liệu không khả dụng. Thời gian chờ sẽ khiến quá trình tự động khởi động lại nếu ứng dụng WSGI không tải đúng cách sau khoảng thời gian chờ. Ngay cả khi điều đó sẽ không hữu ích khi bạn gặp vấn đề vĩnh viễn với mã của riêng mình. Trong trường hợp đó, hãy tìm lỗi đầu tiên, không phải populate()lỗi vì nó sẽ đưa ra lý do thực sự khiến mã của bạn bị lỗi.
Graham Dumpleton

1
Ý bạn là "wsgi.py của dự án Django với chức năng đơn giản này" là gì? Làm cách nào để bạn thay thế một tệp bằng một hàm?
Cerin

46

Tôi biết đây là một câu trả lời cũ nhưng tôi sẽ đóng góp với giải pháp của mình:

Như một cách để chẩn đoán nguồn gốc của sự cố, hãy chạy manage.py checkvà xem bạn có tìm thấy gì ở đó không

Trong trường hợp của tôi, một yêu cầu lỗi thời là vấn đề và django không nhập được mô-đun con

Đảm bảo rằng các yêu cầu của bạn được cập nhật


2
Tôi gặp lỗi 500 trên Apache và tôi không thể tìm thấy sự cố. Bằng lệnh này, manage.py checktôi đã tìm thấy vấn đề. Cảm ơn bạn.
Ali Hesari

13

Đó không phải là một phản ứng mà là một phản xạ.

Khi bạn nâng cấp lên django 1.7 và bạn gặp lỗi 500 và tải lại trang của mình, Apache cho biết "populate () not reentrant". Tôi nghĩ đó là khi bạn tải trang của mình, Apache sẽ tải tất cả các mô-đun bạn cần cho ứng dụng của mình và khi lỗi được xử lý, nó sẽ không tải mô-đun. Vì vậy, khi bạn tải lại trang của mình, apache sẽ tải lại các mô-đun này nhưng nó đã được tải. Vì vậy, apache cho biết "populate () không tái xuất hiện".

Tôi có hai hành động để sửa lỗi này: Khởi động lại apache hoặc sửa lỗi xử lý lỗi 5OO đầu tiên.

Thử khởi động lại apache bằng:

sudo service httpd restart

Tôi hy vọng nó sẽ giúp bạn.


10

Nếu bạn gặp lỗi này khi sử dụng Google App Engine, hãy kiểm tra nhật ký của bạn để tìm các lỗi khác có thể gây ra lỗi này. Tôi đã nhận được:

ImproperlyConfigured: Error loading either pysqlite2 or sqlite3 modules (tried in that order): No module named _sqlite3

Bạn không thể sử dụng SQLite với Google App Engine, vì vậy hãy bình luận DATABASESphần settings.pydừng lỗi đó và RuntimeError("populate() isn't reentrant")lỗi đó.


Điều này giải thích tại sao mọi thứ hoạt động tốt cục bộ nhưng lại gặp lỗi 500 khi triển khai sang GAE. Một gợi ý nhỏ: văn bản tìm kiếm "raise" trên trang nhật ký GAE đã tạo ra một lần truy cập chính xác dẫn đến thông báo lỗi do donturner chỉ ra. Giải pháp của anh ấy đã cứu rỗi ngày của tôi :-)
Golden Thumb

4

Bạn có thể khắc phục sự cố này mà không cần khởi động lại Apache bằng cách chạm vào một tệp (không phải wsgi.py) đang bắt đầu trong quá trình tải. Ví dụ: tệp cài đặt của bạn:

$ touch settings.py

Tôi cũng chưa giải quyết được vấn đề này một cách chính xác, nhưng có thêm thông tin trong câu hỏi của tôi ở đây: Giám sát thay đổi mã bị trục trặc với Django 1.7 trên mod-wsgi



2

Tôi vừa phải đối mặt với cùng một vấn đề nên tôi bắt đầu quan sát xung quanh.

Bây giờ tôi đã có nó hoạt động, vì vậy tôi nghĩ tôi nên chia sẻ nó với các bạn!

Tất cả những gì tôi đã làm là làm chown user:group /to/path -Rchmod 770 /to/path -Rlặp lại và nó hoạt động.


2

Đây trông giống như một bộ sưu tập các câu trả lời hợp lệ cho cùng một lỗi Apache mod-wsgi, mỗi anh chàng đăng một câu phù hợp với anh ấy / cô ấy, vì vậy đây là của tôi:

Đừng quên cập nhật các yêu cầu dự án của bạn sau khi triển khai :)


2

Tôi đã gặp phải sự cố tương tự và nguồn gốc của lỗi đối với tôi chỉ là lỗi cú pháp trong tệp tôi đang làm việc. Sau khi sửa lỗi chính tả, populate() is not reentrantlỗi đã biến mất.

Nếu bạn đang chạy django từ tập lệnh wsgi, bạn có thể xác định lỗi đánh máy bằng cách chỉ chạy tập lệnh wsgi từ dòng lệnh. Ví dụ:

cd /usr/local/www/wsgi-scripts/
python djangolauncher.wsgi

2

Lỗi này cũng tạo ra nếu sử dụng không nhất quán của khoảng trắng và tab trong mã.


1

Thiết lập: Ubuntu 14.04, Django 1.10, Python 3.5 (trong virtualenv).

Tôi đã thử nhiều giải pháp này mà không gặp may, nhưng sau đó tôi nhận thấy rằng nhật ký lỗi Apache chứa hai lỗi khác nhau trong trường hợp của tôi. Một cái xảy ra khi ai đó cố gắng truy cập một trang, một cái khác xảy ra khi khởi động. Tôi đã bỏ lỡ lần khởi động vì tôi thường cố gắng làm mới trang một vài lần và do đó chỉ thấy lỗi khi truy cập lặp lại một vài lần.

Sau đó, tôi đã tìm kiếm các giải pháp cho lỗi khởi động thay thế và giải pháp cho câu hỏi này đã phù hợp với tôi . Tóm lại, nó liên quan đến việc cập nhật mod_wsgigói theo cách vòng vo.

Tôi đã nhận được cảnh báo trong nhiều tháng về sự không khớp trong mod_wsgicác phiên bản, nhưng đột nhiên nó dẫn đến lỗi Apache 500. Không có ý nghĩa gì đối với tôi.

Tôi đoán rằng RuntimeError: populate() isn't reentrantlỗi này thường là một dấu hiệu cho thấy người ta nên tìm kiếm lỗi khởi động, điều này cho biết vấn đề thực sự.

đến thăm

[Sat Oct 15 03:38:08.900966 2016] [:error] [pid 28272] [remote 95.166.81.114:39651] mod_wsgi (pid=28272): Target WSGI script '/django/GP/GP/wsgi.py' cannot be loaded as Python module.
[Sat Oct 15 03:38:08.901409 2016] [:error] [pid 28272] [remote 95.166.81.114:39651] mod_wsgi (pid=28272): Exception occurred processing WSGI script '/django/GP/GP/wsgi.py'.
[Sat Oct 15 03:38:08.901662 2016] [:error] [pid 28272] [remote 95.166.81.114:39651] Traceback (most recent call last):
[Sat Oct 15 03:38:08.902184 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]   File "/django/GP/GP/wsgi.py", line 16, in <module>
[Sat Oct 15 03:38:08.902217 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]     application = get_wsgi_application()
[Sat Oct 15 03:38:08.902501 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]   File "/django/env/lib/python3.5/site-packages/django/core/wsgi.py", line 13, in get_wsgi_application
[Sat Oct 15 03:38:08.902529 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]     django.setup(set_prefix=False)
[Sat Oct 15 03:38:08.902726 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]   File "/django/env/lib/python3.5/site-packages/django/__init__.py", line 27, in setup
[Sat Oct 15 03:38:08.902755 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]     apps.populate(settings.INSTALLED_APPS)
[Sat Oct 15 03:38:08.902924 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]   File "/django/env/lib/python3.5/site-packages/django/apps/registry.py", line 78, in populate
[Sat Oct 15 03:38:08.902953 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]     raise RuntimeError("populate() isn't reentrant")
[Sat Oct 15 03:38:08.903111 2016] [:error] [pid 28272] [remote 95.166.81.114:39651] RuntimeError: populate() isn't reentrant

khởi động

[Sat Oct 15 03:38:08.900966 2016] [:error] [pid 28272] [remote 95.166.81.114:39651] mod_wsgi (pid=28272): Target WSGI script '/django/GP/GP/wsgi.py' cannot be loaded as Python module.
[Sat Oct 15 03:38:08.901409 2016] [:error] [pid 28272] [remote 95.166.81.114:39651] mod_wsgi (pid=28272): Exception occurred processing WSGI script '/django/GP/GP/wsgi.py'.
[Sat Oct 15 03:38:08.901662 2016] [:error] [pid 28272] [remote 95.166.81.114:39651] Traceback (most recent call last):
[Sat Oct 15 03:38:08.902184 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]   File "/django/GP/GP/wsgi.py", line 16, in <module>
[Sat Oct 15 03:38:08.902217 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]     application = get_wsgi_application()
[Sat Oct 15 03:38:08.902501 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]   File "/django/env/lib/python3.5/site-packages/django/core/wsgi.py", line 13, in get_wsgi_application
[Sat Oct 15 03:38:08.902529 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]     django.setup(set_prefix=False)
[Sat Oct 15 03:38:08.902726 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]   File "/django/env/lib/python3.5/site-packages/django/__init__.py", line 27, in setup
[Sat Oct 15 03:38:08.902755 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]     apps.populate(settings.INSTALLED_APPS)
[Sat Oct 15 03:38:08.902924 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]   File "/django/env/lib/python3.5/site-packages/django/apps/registry.py", line 78, in populate
[Sat Oct 15 03:38:08.902953 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]     raise RuntimeError("populate() isn't reentrant")
[Sat Oct 15 03:38:08.903111 2016] [:error] [pid 28272] [remote 95.166.81.114:39651] RuntimeError: populate() isn't reentrant
[Sat Oct 15 03:38:43.291502 2016] [:error] [pid 28272] Exception ignored in: <module 'threading' from '/usr/lib/python3.4/threading.py'>
[Sat Oct 15 03:38:43.291579 2016] [:error] [pid 28272] Traceback (most recent call last):
[Sat Oct 15 03:38:43.291604 2016] [:error] [pid 28272]   File "/usr/lib/python3.4/threading.py", line 1288, in _shutdown
[Sat Oct 15 03:38:43.292356 2016] [:error] [pid 28272]     assert tlock is not None
[Sat Oct 15 03:38:43.292377 2016] [:error] [pid 28272] AssertionError: 
[Fri Oct 14 23:38:43.412942 2016] [:error] [pid 28299] Exception ignored in: <module 'threading' from '/usr/lib/python3.4/threading.py'>
[Fri Oct 14 23:38:43.413044 2016] [:error] [pid 28299] Traceback (most recent call last):
[Fri Oct 14 23:38:43.413076 2016] [:error] [pid 28299]   File "/usr/lib/python3.4/threading.py", line 1288, in _shutdown
[Fri Oct 14 23:38:43.425037 2016] [:error] [pid 28275] Exception ignored in: <module 'threading' from '/usr/lib/python3.4/threading.py'>
[Fri Oct 14 23:38:43.425125 2016] [:error] [pid 28275] Traceback (most recent call last):
[Fri Oct 14 23:38:43.425157 2016] [:error] [pid 28275]   File "/usr/lib/python3.4/threading.py", line 1288, in _shutdown
[Fri Oct 14 23:38:43.427625 2016] [:error] [pid 28274] Exception ignored in: <module 'threading' from '/usr/lib/python3.4/threading.py'>
[Fri Oct 14 23:38:43.427694 2016] [:error] [pid 28274] Traceback (most recent call last):
[Fri Oct 14 23:38:43.427722 2016] [:error] [pid 28274]   File "/usr/lib/python3.4/threading.py", line 1288, in _shutdown
[Fri Oct 14 23:38:43.432020 2016] [:error] [pid 28273] Exception ignored in: <module 'threading' from '/usr/lib/python3.4/threading.py'>
[Fri Oct 14 23:38:43.432078 2016] [:error] [pid 28273] Traceback (most recent call last):
[Fri Oct 14 23:38:43.432105 2016] [:error] [pid 28273]   File "/usr/lib/python3.4/threading.py", line 1288, in _shutdown
[Fri Oct 14 23:38:43.438577 2016] [:error] [pid 28299]     assert tlock is not None
[Fri Oct 14 23:38:43.438654 2016] [:error] [pid 28299] AssertionError: 
[Fri Oct 14 23:38:43.442174 2016] [:error] [pid 28274]     assert tlock is not None
[Fri Oct 14 23:38:43.442226 2016] [:error] [pid 28274] AssertionError: 
[Fri Oct 14 23:38:43.447227 2016] [:error] [pid 28276] Exception ignored in: <module 'threading' from '/usr/lib/python3.4/threading.py'>
[Fri Oct 14 23:38:43.447294 2016] [:error] [pid 28276] Traceback (most recent call last):
[Fri Oct 14 23:38:43.447326 2016] [:error] [pid 28276]   File "/usr/lib/python3.4/threading.py", line 1288, in _shutdown
[Fri Oct 14 23:38:43.448813 2016] [:error] [pid 28277] Exception ignored in: <module 'threading' from '/usr/lib/python3.4/threading.py'>
[Fri Oct 14 23:38:43.448876 2016] [:error] [pid 28277] Traceback (most recent call last):
[Fri Oct 14 23:38:43.448903 2016] [:error] [pid 28277]   File "/usr/lib/python3.4/threading.py", line 1288, in _shutdown
[Fri Oct 14 23:38:43.450188 2016] [:error] [pid 28273]     assert tlock is not None
[Fri Oct 14 23:38:43.450231 2016] [:error] [pid 28273] AssertionError: 
[Fri Oct 14 23:38:43.456680 2016] [:error] [pid 28275]     assert tlock is not None
[Fri Oct 14 23:38:43.456737 2016] [:error] [pid 28275] AssertionError: 
[Fri Oct 14 23:38:43.461761 2016] [:error] [pid 28277]     assert tlock is not None
[Fri Oct 14 23:38:43.461826 2016] [:error] [pid 28277] AssertionError: 
[Fri Oct 14 23:38:43.466165 2016] [:error] [pid 28276]     assert tlock is not None
[Fri Oct 14 23:38:43.466219 2016] [:error] [pid 28276] AssertionError: 
[Fri Oct 14 23:38:43.658971 2016] [mpm_prefork:notice] [pid 28268] AH00169: caught SIGTERM, shutting down
[Sat Oct 15 03:38:43.691909 2016] [:error] [pid 28272] Exception ignored in: <module 'threading' from '/usr/lib/python3.4/threading.py'>
[Sat Oct 15 03:38:43.691968 2016] [:error] [pid 28272] Traceback (most recent call last):
[Sat Oct 15 03:38:43.691996 2016] [:error] [pid 28272]   File "/usr/lib/python3.4/threading.py", line 1288, in _shutdown
[Sat Oct 15 03:38:43.693126 2016] [:error] [pid 28272]     assert tlock is not None
[Sat Oct 15 03:38:43.693159 2016] [:error] [pid 28272] AssertionError: 
[Fri Oct 14 23:38:44.490316 2016] [:warn] [pid 28349] mod_wsgi: Compiled for Python/3.4.0.
[Fri Oct 14 23:38:44.490407 2016] [:warn] [pid 28349] mod_wsgi: Runtime using Python/3.4.3.
[Fri Oct 14 23:38:44.505672 2016] [mpm_prefork:notice] [pid 28349] AH00163: Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.19 mod_wsgi/3.4 Python/3.4.3 configured -- resuming normal operations
[Fri Oct 14 23:38:44.505764 2016] [core:notice] [pid 28349] AH00094: Command line: '/usr/sbin/apache2'

Tạo một câu hỏi mới. Đừng đặt câu hỏi như câu trả lời.
Graham Dumpleton

1
Tôi không hỏi một câu hỏi. Đăng một giải pháp cho cùng một vấn đề phù hợp với tôi. Apache tạo ra lỗi 500 và lỗi trong tệp nhật ký giống như lỗi trong câu hỏi được hỏi ở đây. Hãy đọc lại câu trả lời của tôi. :)
CoderGuy123

Sau đó, hãy đưa giải pháp thực tế vào câu trả lời của bạn thay vì liên kết với một câu hỏi khác. Vấn đề là mặc dù bài đăng khác đó hoàn toàn không đề cập đến populate()vấn đề và đối với tôi có vẻ như một vấn đề hoàn toàn khác, vì vậy tôi không thể hiểu bạn nghĩ nó giải quyết cùng một vấn đề như thế nào. Theo như bất kỳ ai có thể nói, bạn đã gặp một vấn đề khác mà lẽ ra bạn nên đặt một câu hỏi riêng ngay từ đầu thay vì nhầm lẫn các câu trả lời ở đây cho những gì trông giống như một vấn đề khác dựa trên các chi tiết trong bài đăng khác đó ..
Graham Dumpleton

Không cần thiết phải lặp lại các bước ở đây. Các lỗi xuất hiện trong cùng một nhật ký, chỉ là OP ở đây không bao gồm tất cả. Một lỗi hiển thị khi trang được truy cập (đó là một phần trong OP ở đây), một lỗi khác khi Apache khởi động (đó là một phần trong chuỗi khác).
CoderGuy123,

1

Tôi biết đã lâu kể từ khi câu hỏi này được hỏi, nhưng tôi chỉ gặp vấn đề này do một vấn đề mà tôi chưa thấy thảo luận ở đây. Tôi đã gặp RuntimeError: populate() isn't reentrantlỗi do SELinux trên CentOS 7. Tôi đã cung cấp Django ra khỏi thư mục chính và tôi chỉ cần bật boolean SELinux cho phép đọc thư mục chính, vì lỗi populate () là do vấn đề về quyền. Giải pháp cho tôi là setsebool -P httpd_read_user_content 1. Tôi hy vọng điều này sẽ giúp ai đó có vấn đề này.


Chúng tôi đã gặp vấn đề tương tự với CentOS 7 và SELinux. Chúng tôi đã khắc phục sự cố bằng cách sử dụng chconđể thay đổi ngữ cảnh của .sotệp sự cố thành httpd_sys_script_exec_t .
Jon

1

Vô số câu trả lời làm cho nó rõ ràng; đây là một lỗi chung có thể có nhiều nguyên nhân gốc, thường liên quan đến tải Apache / WSGI.

Tất cả các câu trả lời trên trang này phải hoạt động như một loại danh sách kiểm tra, và theo cách đó, tôi muốn thêm nguyên nhân gốc rễ của trường hợp lỗi này của tôi: không thêm được 'import os' vào tệp settings.py của bạn.

Cụ thể, chúng tôi có một nhà phát triển trong nhóm của chúng tôi dự định xóa một gói không cần thiết và thay vào đó xóa 'import os' khỏi đầu tệp production settings.py. Sau khi khởi động lại apache, ứng dụng của chúng tôi sẽ không khởi động lại và chúng tôi nhận được lỗi 'RuntimeError: populate () not reentrant' đáng sợ.

Một 'kiểm tra python management.py' nhanh chóng không tiết lộ sự cố, nhưng 'python settings.py' đã làm được; gói hệ điều hành không được tải.

Nếu bạn gặp lỗi này, hãy tập trung tìm kiếm vào việc kiểm tra (các) tệp settings.py và cả tệp WSGI của bạn.


3
Quan trọng hơn, hãy đảm bảo bạn quay lại nhật ký lỗi và tìm thông báo lỗi đầu tiên xảy ra sau khi khởi động lại một trong các quy trình daemon Apache hoặc mod_wsgi. Lỗi đầu tiên đó sẽ cho bạn biết lý do thực sự của lỗi, bất kỳ yêu cầu nào sau đó cho cùng một quy trình sẽ chỉ đề cập đến reentrantlỗi. Trong chế độ daemon, hãy đảm bảo rằng bạn đang sử dụng startup-timeouttùy chọn nếu bạn gặp sự cố này do lỗi tạm thời, chứ không phải lỗi mã hóa. Ít nhất bằng cách đó nó có thể tự động phục hồi.
Graham Dumpleton

Đây là câu trả lời đúng, lỗi là chung chung, hãy kiểm tra thông báo ngay trước lỗi thời gian chạy.
Popieluch

1

RuntimeError: populate() isn't reentrant

Có thể là bất cứ điều gì, đó là lý do tại sao có rất nhiều câu trả lời khác nhau cho câu hỏi này.

Bí quyết là xem thông báo lỗi ngay trước RuntimeError. Trong trường hợp của bạn, dường như có lỗi cú pháp trong tệp /extra/www/htmlquotes/quotes_django/quotespage/admin.py trên dòng 15, hãy xem:

Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] File "/extra/www/htmlquotes/quotes_django/quotespage/admin.py", line 25
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] pprove_quotes.short_description = "Approve selected quotes"
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]                  ^
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] SyntaxError: invalid syntax

1

Lưu ý về AWS Elastic Beanstalk: Mặc định settings.pydo Django-admin viết bao gồm tham chiếu đến cơ sở dữ liệu sqlite cục bộ làm nguồn dữ liệu. Điều này có thể sẽ hoạt động trên hệ điều hành cục bộ của bạn, nhưng không hoạt động trên AWS EB và sẽ gây ra populate() isn't reentrantlỗi thời gian chạy. Để kiểm tra điều này, chỉ cần nhận xét DATABASES={<...>}câu lệnh trong settings.py, triển khai và mở lại ứng dụng.


Điều này xảy ra, ví dụ: nếu bạn triển khai AWS EB bằng Django phiên bản 2.2 (hoặc mới hơn) với cơ sở dữ liệu sqlite mặc định. Bạn sẽ được django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).theo dõi bởi RuntimeError: populate() isn't reentrant. Từ tài liệu AWS : "Django 2.2 không tương thích với nền tảng Elastic Beanstalk Python 3.6." (tại thời điểm viết bài)
djvg

0

Tôi đã gặp vấn đề này và không thể tìm thấy bất kỳ câu trả lời nào cho đến khi tôi kiểm tra lại cam kết của mình. Rõ ràng là tôi đã thêm một lần nhập ngẫu nhiên, do tự động hoàn thành, điều này đã làm hỏng thiết lập.

# found in models.py from msilib.schema import SelfReg

Trong nhật ký lỗi apache: RuntimeError ("populate () not reentrant")

Nó hoạt động tốt trong môi trường windows dev của tôi nhưng không thành công trên máy chủ ubuntu / apache.


0

Tôi đã gặp phải lỗi tương tự sau khi thay đổi thứ tự của cài đặt này:

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
)

đặt nó trở lại theo thứ tự ở đây trước đó và khởi động lại apache đã khắc phục sự cố.


0

Trong trường hợp của tôi, tôi có custom renderer classfor Django Rest Framework, vì một số mục đích, tôi phải ghi đè phương thức của lớp trình kết xuất "get_context" (tiết lộ đầy đủ: để django toolbarcung cấp số lượng truy vấn SQL chính xác)

Tôi đã xóa lớp đó và triển khai lại. Nó đã làm việc.


0

Trong trường hợp của tôi, lỗi xảy ra do thiếu gói pip bắt buộc.

Vì vậy, tôi đã thực hiện một pip install -r requirements.txt, khởi động lại apache và mọi thứ hoạt động trở lại.


0

Xóa thư mục virtualenv, tạo lại virtualenv, sau đó cài đặt lại tất cả các yêu cầu đã khắc phục cho tôi.


0

Thêm lý do của tôi vào danh sách. Đối với tôi, đó là bởi vì tôi có một dịch vụ django được đặt tên với cùng một thư mục với một thư mục tiến trình. Đổi tên quy trình / dir đã khắc phục sự cố.


0

Tôi đã có một đệ quy django.setup(), ví dụ: tôi đã cố gắng viết django.setup()bên trong một dấu an app/models.py, trong dấu vết ngăn xếp django đã cố gắng chỉ ra điều này gần:

... "site-packages/django/apps/config.py", line 211, in import_models
    self.models_module = import_module(models_module_name)
...
... ./myproject/myapp/models.py ...

vì vậy, hãy đảm bảo không cố gắng thiết lập django trong khi django đang được thiết lập ...


0

Khởi động lại máy chủ Apache cho tôi đã giải quyết được sự cố. Bạn có thể làm điều đó bằng cách sử dụng lệnh $ sudo service apache2 restart


0

Tôi cũng gặp phải vấn đề này, điều phù hợp với tôi là nhận xét về cài đặt cơ sở dữ liệu mặc định trong / settings.py. Tôi cũng đọc rằng các phiên bản sau của django không tương thích với ebs


0

Đối với tôi lỗi là thiếu mysqlclient gói trong tệp tin request.txt.

Đầu tiên, tôi đã cài đặt mysqlclientgói với:

pip install mysqlclient

sau đó, tôi đã cập nhật tệp tin request.txt với:

pip freeze > requirements.txt

và điều này đã giải quyết được vấn đề của tôi.


-1

Trong trường hợp của tôi, tôi đã nhập theo vòng tròn, gây ra lỗi làm hỏng phương thức điền.


-1

Để ném vào 2 xu Euro của tôi:

Tôi đã tạo lại một thiết lập đang hoạt động trong Docker. Thiết lập Docker mới không thành công với

populate isn't reentrant

mà dường như là một lỗi chung. Trong trường hợp của tôi, tôi đã bỏ qua điều đó

pip install Django

cài đặt phiên bản mới nhất ( 2.0), thay vì phiên bản bắt buộc 1.11. Thay đổi điều này thành

pip install Django==1.11

đã khắc phục sự cố của tôi.


-1

Tôi nghĩ rằng đây là một lỗi chung khi có điều gì đó không ổn settings.py. Đôi khi tôi có thể tìm ra sự cố bằng cách thử và sai bằng cách xóa từng ứng dụng đã cài đặt. Trong một số trường hợp, nó không liên quan đến các ứng dụng đã cài đặt. Nhưng theo kinh nghiệm của tôi, trong mọi trường hợp, đó là một vấn đề trong settings.pytệp.


-1

kiểm tra xem bạn đã đề cập đến tên api của mình hai lần trong phần ứng dụng đã cài đặt của settings.py.

Định nghĩa ứng dụng

INSTALLED_APPS = [
    ...
    'rest_framework',
    'myapp_api',
    'myapp_api.apps.myappWebserviceApiConfig',    
]

Định nghĩa ứng dụng

INSTALLED_APPS = [
    ...
    'rest_framework',
    'myapp_api.apps.myappWebserviceApiConfig',
]

Xóa các mục trùng lặp đã giải quyết được vấn đề của tôi


nhưng hướng dẫn cho biết INSTALLED_APPS = ['allauth', 'allauth.account', 'allauth.socialaccount',]
ming

@ming Nó là tùy chọn.
Swati Srivastava,
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.