Ошибки в программе

6 years 5 months ago #1982 by StalkerSVR
StalkerSVR created the topic: Ошибки в программе
Огромное спасибо за такую нужную программу!
Теперь о неприятном - об ошибках и глюках. Развернул на линуксе и прикрутил к Апачу. При работе под встроенным веб-сервером все было хорошо, а после переноса под апач (или что-то еще доставил на сервер, не уследил этот момент) появились следующие проблемы:
1) при загрузке файлов, которые лежат на диске в каталоге с кириллическими именами (например лежит файл военное дело.zip, внутри которого куча разных книжек) возникает ругань python на ошибку энкодинга. Вылечил добавлением в файл dl.py строчек .encode("utf8")
--- dl.py.bak   2017-11-04 23:32:24.256065562 +0300
+++ dl.py       2017-11-05 21:52:56.090929368 +0300
@@ -58,15 +58,15 @@
     book_size = book.filesize
     if book.cat_type==opdsdb.CAT_NORMAL:
         file_path=os.path.join(full_path, book.filename)
-        book_size=os.path.getsize(file_path)
+        book_size=os.path.getsize(file_path.encode("utf8"))
         try:
-            fo=codecs.open(file_path, "rb")
+            fo=codecs.open(file_path.encode("utf8"), "rb")
         except FileNotFoundError:
             raise Http404
         s=fo.read()
     elif book.cat_type in [opdsdb.CAT_ZIP, opdsdb.CAT_INP]:
         try:
-            fz=codecs.open(full_path, "rb")
+            fz=codecs.open(full_path.encode("utf8"), "rb")
         except FileNotFoundError:
             raise Http404
         z = zipfile.ZipFile(fz, 'r', allowZip64=True)
@@ -107,13 +107,13 @@
     try:
         if book.cat_type == opdsdb.CAT_NORMAL:
             file_path = os.path.join(full_path, book.filename)
-            fo = codecs.open(file_path, "rb")
+            fo = codecs.open(file_path.encode("utf8"), "rb")
             book_data = create_bookfile(fo,book.filename)
             image = book_data.extract_cover_memory()
             #fb2.parse(fo, 0)
             fo.close()
         elif book.cat_type in [opdsdb.CAT_ZIP, opdsdb.CAT_INP]:
-            fz = codecs.open(full_path, "rb")
+            fz = codecs.open(full_path.encode("utf8"), "rb")
             z = zipfile.ZipFile(fz, 'r', allowZip64=True)
             fo = z.open(book.filename)
             book_data = create_bookfile(fo, book.filename)
@@ -164,11 +164,11 @@
         fb2=fb2parse.fb2parser(1)
         if book.cat_type==opdsdb.CAT_NORMAL:
             file_path=os.path.join(full_path,book.filename)
-            fo=codecs.open(file_path, "rb")
+            fo=codecs.open(file_path.encode("utf8"), "rb")
             fb2.parse(fo,0)
             fo.close()
         elif book.cat_type in [opdsdb.CAT_ZIP, opdsdb.CAT_INP]:
-            fz=codecs.open(full_path, "rb")
+            fz=codecs.open(full_path.encode("utf8"), "rb")
             z = zipfile.ZipFile(fz, 'r', allowZip64=True)
             fo = z.open(book.filename)
             fb2.parse(fo,0)
@@ -247,7 +247,7 @@
         file_path=os.path.join(full_path, book.filename)
     elif book.cat_type in [opdsdb.CAT_ZIP, opdsdb.CAT_INP]:
         try:
-            fz=codecs.open(full_path, "rb")
+            fz=codecs.open(full_path.encode("utf8"), "rb")
         except FileNotFoundError:
             raise Http404
         z = zipfile.ZipFile(fz, 'r', allowZip64=True)
@@ -261,8 +261,8 @@
     #proc = subprocess.Popen((converter_path.encode('utf8'),file_path.encode('utf8'),tmp_conv_path.encode('utf8')), shell=True, stdout=subprocess.PIPE)
     out = proc.stdout.readlines()

-    if os.path.isfile(tmp_conv_path):
-        fo=codecs.open(tmp_conv_path, "rb")
+    if os.path.isfile(tmp_conv_path.encode("utf8")):
+        fo=codecs.open(tmp_conv_path.encode("utf8"), "rb")
         s=fo.read()
         # HTTP Header
         response = HttpResponse()
2) в качестве читалки использую клиента Tucan Reader и Coffee Reader под Windows Phone. Тут возникли проблемы, Coffee Reader совсем не реагирует на ссылки и не хочет работать с данным сервером, а Tucan Reader работает, но с одним неприятным исключением - если открывать книгу из выбора по авторам/жанрам/названию, то все работает. А если открывать из выбора "каталоги", доходя до нужного файла, то не может её скачать. Почему не понимаю, руками по выводимой ссылке все скачивается, в логах Апача тоже идет обычное обращение к файлу. Причем, в самый первый момент, когда только развернул программу и работал с внутренним сервером, то файлы отдавались. А сейчас пробовал опять пустить внутренний сервер, и с него тоже не качается.
3) Предложение по обработке inpx файлов. Сейчас если его обрабатывать, то в библиотеке не будет хватать описания книг и картинок. Есть предложение ориентироваться на файл inpx на предмет наличия нужных книг, но пересканировать и сами книги, дабы получить описания и картинки. Помнится в дискуссиях на рутрекере в темах по выкладыванию библиотеки либрусек упоминалась разница в количестве книг при прямом сканировании и при работе с файлом inpx, дескать лучше ориентироваться на записи в нем, там более упорядочено все.

Please Войти or Create an account to join the conversation.

  • StalkerSVR
  • StalkerSVR's Avatar Topic Author
  • Offline
  • Новый участник
  • Новый участник
More
6 years 5 months ago - 6 years 5 months ago #1983 by mitshel
mitshel replied the topic: Ошибки в программе
Спасибо за отчет. 1) Возможно неверная настройка Apache, хотелось бы увидеть логи ошибок, настройки Apache и т.д. вместо обтекаемого "ругань", и еще поищите по форуму про настройку файла /etc/sysconfig/httpd.
2) Однако неясно что за проблема с Windows Phone - не владею таким аппаратом, поэтому хотелось бы получить более подробную информацию.
3) Зачем сканировать INPX, а затем пересканировать коллекцию - просто отключите INPX и все.

Да и еще: если все хорошо работало со встроенным сервером, а под Апачем есть проблемы - о скорее всего проблемы неверной настройке Apache либо прав доступа к файлам. Кроме того для того чтобы действительно помочь исправить найденные ошибки, прошу вас прислать более полную информацию по каждому пункту (в какой системе запускаете - название, версия/версия apache/настройки apache/логи возникающих ошибок)
Last Edit: 6 years 5 months ago by mitshel.

Please Войти or Create an account to join the conversation.

  • mitshel
  • mitshel's Avatar
  • Offline
  • Администратор
  • Администратор
More
6 years 5 months ago #1984 by StalkerSVR
StalkerSVR replied the topic: Ошибки в программе
Ошибка была такого плана
UnicodeEncodeError at /opds/download/775379/0/
'ascii' codec can't encode characters in position 14-19: ordinal not in range(128)
Request Method:
GET
Request URL:
http://*****.ddns.net/opds/download/775379/0/
Django Version:
1.11.7
Exception Type:
UnicodeEncodeError
Exception Value:
'ascii' codec can't encode characters in position 14-19: ordinal not in range(128)
Exception Location:
/usr/lib/python3.6/codecs.py in open, line 895
Python Executable:
/usr/bin/python3
Python Version:
3.6.3
Python Path:
['/opt/sopds',
'/usr/lib/python36.zip',
'/usr/lib/python3.6',
'/usr/lib/python3.6/lib-dynload',
'/usr/local/lib/python3.6/dist-packages',
'/usr/lib/python3/dist-packages',
'/usr/lib/python3.6/dist-packages']
Server time:
Пн, 6 Ноя 2017 21:50:08 +0300
Environment:


Request Method: GET
Request URL: http://stalkersvr.ddns.net/opds/download/775379/0/

Django Version: 1.11.7
Python Version: 3.6.3
Installed Applications:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'opds_catalog',
 'sopds_web_backend',
 'django.contrib.admin',
 'django.contrib.staticfiles',
 'constance.backends.database',
 'constance']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'opds_catalog.middleware.SOPDSLocaleMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback:

File "/usr/local/lib/python3.6/dist-packages/django/core/handlers/exception.py" in inner
  41.             response = get_response(request)

File "/usr/local/lib/python3.6/dist-packages/django/core/handlers/base.py" in _legacy_get_response
  249.             response = self._get_response(request)

File "/usr/local/lib/python3.6/dist-packages/django/core/handlers/base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "/usr/local/lib/python3.6/dist-packages/django/core/handlers/base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/opt/sopds/opds_catalog/dl.py" in Download
  69.             fz=codecs.open(full_path, "rb")

File "/usr/lib/python3.6/codecs.py" in open
  895.     file = builtins.open(filename, mode, buffering)

Exception Type: UnicodeEncodeError at /opds/download/775379/0/
Exception Value: 'ascii' codec can't encode characters in position 14-19: ordinal not in range(128)

Настройки Апача брал тут на форуме
WSGIPythonPath /opt/sopds/

<VirtualHost _default_:80>

   ServerAdmin webmaster@localhost
   ServerName  sopds-apache.example.com

   WSGIScriptAlias / /opt/sopds/sopds/wsgi.py
   WSGIDaemonProcess sopds processes=2 threads=15 python-path=/opt/sopds/
   WSGIProcessGroup sopds
   WSGIScriptReloading On
   WSGIPassAuthorization On

   <Directory "/opt/sopds/sopds/">
      Require all granted
   </Directory>

   <Directory "/opt/sopds/static/">
      Require all granted
   </Directory>

   Alias   /static    "/opt/sopds/static"

</VirtualHost>

версия системы:
Linux hserv 4.13.0-1-amd64 #1 SMP Debian 4.13.4-2 (2017-10-15) x86_64 GNU/Linux
Server version: Apache/2.4.29 (Debian)
Server built: 2017-10-23T14:46:55
Python 3.6.3
версия sopds - 0.43

про проблемы с телефонными читалками пока разбираюсь, ни одна из трех имеющихся не хочет полностью работать. Нашел даже онлайн валидатор - opds-validator.appspot.com/ который на возвращаемые данные слегка ругается. Но думаю, что проблема в чем-то другом... Пока пытаюсь разобраться, ибо нигде нет ошибок, но читалка именно из каталога не хочет показывать файлы.

Please Войти or Create an account to join the conversation.

  • StalkerSVR
  • StalkerSVR's Avatar Topic Author
  • Offline
  • Новый участник
  • Новый участник
More
Time to create page: 0.108 seconds