1

ステージング サーバーで ICU の Collat​​or 属性にアクセスしようとすると、このエラーが発生します。

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

Django のシェルを起動してまったく同じコードを実行すると、すべてがローカルと同じように機能しているように見えます。エラーの原因となっているコードは次のとおりです。

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

Ondrej の PHP5 PPAと PyICU を使用して、ICU ( libicu52, libicu-dev) をローカルとステージング サーバーの両方に正常にインストールしました。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 のシェルでは正常に機能しているのに、Web サーバー経由では機能していない理由は何でしょうか?

4

1 に答える 1

3

これは uWSGI の設定ミスであることが判明し、PyICU や ICU とは何の関係もありませんでした。uWSGI が virtualenv にインストールされたパッケージを使用していないことがわかったので、uWSGI 構成ファイルをもう一度調べました。

chdirは正しいフォルダーに設定されておらず、代わりにその親フォルダーを指していました。

他のすべてのパッケージが機能した理由はわかりません。

于 2014-01-13T08:44:03.460 に答える