2014-01-10 57 views
1

當試圖訪問臨時服務器上的ICU Collat​​or屬性時,出現此錯誤。PyICU在Django shell中工作,但不在Web服務器上

AttributeError at /... 
'module' object has no attribute 'Collator' 

當啓動Django的shell並執行完全相同的代碼時,一切似乎都像在本地一樣工作。導致該錯誤代碼是:通過Ondrej's PHP5 PPA

import icu 
    collator = icu.Collator.createInstance(icu.Locale(get_language())) 
    objects = [i for i in sorted(objects, key=attrgetter('city'), cmp=collator.compare)] 

我已經成功地安裝了ICU(libicu52, libicu-dev),以及PyICU本地和我們的臨時服務器上。使用Python 2.7.5,Django 1.5.5,Nginx 1.4.1和uWSGI 1.9.13運行Ubuntu Server 13.10的服務器。

以下是完整回溯:

File "/var/www/venv/site/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    115.       response = callback(request, *callback_args, **callback_kwargs) 
File "/var/www/venv/site/local/lib/python2.7/site-packages/django/views/generic/base.py" in view 
    68.    return self.dispatch(request, *args, **kwargs) 
File "/var/www/venv/site/local/lib/python2.7/site-packages/django/views/generic/base.py" in dispatch 
    86.   return handler(request, *args, **kwargs) 
File "/var/www/.../pages/views.py" in get 
    48.    return StoreListView.as_view(object=self.object)(request) 
File "/var/www/venv/site/local/lib/python2.7/site-packages/django/views/generic/base.py" in view 
    68.    return self.dispatch(request, *args, **kwargs) 
File "/var/www/venv/site/local/lib/python2.7/site-packages/django/views/generic/base.py" in dispatch 
    86.   return handler(request, *args, **kwargs) 
File "/var/www/venv/site/local/lib/python2.7/site-packages/django/views/generic/list.py" in get 
    124.   self.object_list = self.get_queryset() 
File "/var/www/.../geosearch/views.py" in get_queryset 
    22.    objects = self.sort_objects(objects) 
File "/var/www/.../geosearch/views.py" in sort_objects 
    59.   collator = icu.Collator.createInstance(icu.Locale(get_language())) 

Exception Type: AttributeError at /... 
Exception Value: 'module' object has no attribute 'Collator' 

我設法打印ICU的__dict__,但它給了我一個ICUError。在本地,ICU將返回其實際屬性,包括Collat​​or。

ICUError=<class 'icu.ICUError'>, 
__builtins__={'bytearray': <type 'bytearray'>, 
'IndexError': <type 'exceptions.IndexError'> 
[...] 

代碼在Django的shell中應該如何工作,而不是通過Web服務器,這可能是什麼原因?

回答

3

原來是uWSGI中的配置錯誤,與PyICU或ICU無關。我想到uWSGI並沒有使用安裝在virtualenv中的軟件包,所以我再次查看了uWSGI配置文件。

chdir未設置爲正確的文件夾,而是指向其父文件夾。

爲什麼所有其他包的工作,我不知道。

相關問題