nixys / nxs-chat-srv

Nixys chat bot that integrates Telegram and Redmine
GNU General Public License v3.0
35 stars 10 forks source link

Ошибка при добавлении файла в задачу #5

Closed yakhlakov closed 6 years ago

yakhlakov commented 6 years ago

Добрый день. Моя конфигурация: Environment: Redmine version 3.4.4.stable Ruby version 2.3.4-p301 (2017-03-30) [x86_64-linux] Rails version 4.2.8 Environment production Database adapter Mysql2 SCM: Git 2.7.4 Filesystem
Redmine plugins: ... nxs_chat 1.5 ... redmine_dropbox_attachments 2.2.1 ...

Плагин redmine_dropbox_attachment складывает все файлы в Drop Box.

При попытке прикрепить файла к задаче появляется сообщение об ошибке: image

В логах:

[31.01.2018 16:47:54.990034]    (14)    DEBUG:      [queue-worker]: tlgrm file download: success
[31.01.2018 16:47:56.545257]    (14)    ERROR:      [queue-worker]: rdmn file upload error: wrong Redmine response code (file path: /var/spool/nxs-chat-srv/tlgrm/168634058/file_3.jpg, response code: 500, response body: "")
[31.01.2018 16:47:56.895946]    (14)    DEBUG:      [queue-worker]: tlgrm request: success
[31.01.2018 16:47:56.895981]    (14)    WARNING:    [queue-worker]: error in 'proc.queue-worker.tlgrm-update.handler_callback_sess_type_message' (user id: 168634058, error code: 2)
[31.01.2018 16:47:56.896115]    (14)    WARNING:    [queue-worker]: error in 'proc.queue-worker.tlgrm-update.handler_callback_exec' (user id: 168634058, error code: 2)

Понятное дело, что проблема в плагине redmine_dropbox_attachment. Можно ли ее как-то обойти?

Спасибо.

borisershov commented 6 years ago

Здравствуйте!

У меня пока два вопроса:

  1. Если отключить в Redmine плагин redmine_dropbox_attachments, то будет ли загрузка файлов работать корректно?
  2. Можете ли Вы привести лог Redmine с ошибкой при попытке загрузки?
yakhlakov commented 6 years ago
  1. Отключил плагин, результат: image
  2. Снова включаю плагин: image

Remine log:

Started POST "/uploads.json" for xx.xx.xx.xx at 2018-01-31 22:33:33 +0300
Processing by AttachmentsController#upload as JSON
  Current user: XX(id=43)
Completed 500 Internal Server Error in 16ms (ActiveRecord: 2.3ms)

NoMethodError (undefined method `split' for nil:NilClass):
  plugins/redmine_dropbox_attachments/lib/redmine_dropbox/attachments_controller_patch.rb:48:in `prepare_dropbox_redirect'
  lib/redmine/sudo_mode.rb:63:in `sudo_mode'

nxs-chat-srv log:

[31.01.2018 19:33:31.574971]    (13)    DEBUG:      [queue-worker]: tlgrm request: success
[31.01.2018 19:33:32.107607]    (13)    DEBUG:      [queue-worker]: tlgrm file download: success
[31.01.2018 19:33:33.713803]    (13)    ERROR:      [queue-worker]: rdmn file upload error: wrong Redmine response code (file path: /var/spool/nxs-chat-srv/tlgrm/168634058/file_7.png, response code: 500, response body: "")
[31.01.2018 19:33:33.961946]    (13)    DEBUG:      [queue-worker]: tlgrm request: success
[31.01.2018 19:33:33.961975]    (13)    WARNING:    [queue-worker]: error in 'proc.queue-worker.tlgrm-update.handler_message_sess_type_new_issue' (user id: 168634058, error code: 2)
[31.01.2018 19:33:33.962111]    (13)    WARNING:    [queue-worker]: error in 'proc.queue-worker.tlgrm-update.handler_message_exec' (user id: 168634058, error code: 2)

Вот часть кода, на которой происходит ошибка:

          # Since we uploads occur prior to an actual record being created,
          # the context needs to be parsed from the url.
          #   ex: http://url/projects/project_id/..../action_id
-->    ref = request.env["HTTP_REFERER"].split("/")
          # We also only want the url parts that follow .../projects/ if possible.
          # If not, just use the standard split HTTP_REFERER
          ref = ref[ref.index("projects") + 1 .. -1] if ref.index("projects")

UPD Я, конечно, не уверен, но все таки... Может быть дело в плагине nxs-chat? Там в файле redmine/plugins/nxs_chat/lib/chat_helper.rb есть такой код:

        # Attachments
        unless issue.attachments.nil?
          json[:attachments] = []
          issue.attachments.each do |attachment|
            a = {}
            a["id"] = attachment.id
            a["filename"] = attachment.filename
            a["filesize"] = attachment.filesize
            a["content_type"] = attachment.content_type
            a["description"] = attachment.description
            #a["content_url"] = url_for(:controller => 'attachments', :action => 'download', :id => attachment, :filename => attachment.filename, :only_path => false) # TODO
            a["author"] = {:id => attachment.author.id, :name => attachment.author.name} unless attachment.author.nil?
            a["created_on"] = attachment.created_on

            json[:attachments] += [a]
          end
        end
borisershov commented 6 years ago

Здравствуйте!

Проверьте, пожалуйста, будет ли создаваться задача и прикрепляться к ней файлы если производить загрузку curl'ом из консоли? Вот пример того как это можно сделать: http://www.redmine.org/projects/redmine/wiki/Rest_api_with_curl#Attaching-files (раздел Attaching-files)

borisershov commented 6 years ago

Дополню...

Если при проверке curl'ом будет выдаваться ошибка - отключите, пожалуйста, плагин nxs_chat и повторите загрузку. Сохранится ли проблема?

yakhlakov commented 6 years ago

Что с включенным, что с выключенным плагином nxs_chat лог аналогичный:

Started POST "/uploads.xml" for XX.XX.XX.XX at 2018-02-01 12:54:21 +0300
Processing by AttachmentsController#upload as XML
  Current user: admin (id=1)
Completed 500 Internal Server Error in 97ms (ActiveRecord: 69.1ms)

NoMethodError (undefined method `split' for nil:NilClass):
  plugins/redmine_dropbox_attachments/lib/redmine_dropbox/attachments_controller_patch.rb:48:in `prepare_dropbox_redirect'
  lib/redmine/sudo_mode.rb:63:in `sudo_mode'

Когда отключаю плагин dropbox - все ок:

<?xml version="1.0" encoding="UTF-8"?><upload><id>18</id>
token>18.0ec48c151eac763ac732dd2b03e22d1279ea6447a9ea337ff17ade67d1597977</token>
/upload>sergey@sergey-ubuntu:/var/data/redmine$
borisershov commented 6 years ago

Тогда я не уверен, что мы сможем Вам помочь с этим вопросом. Посмотрим, конечно, в команде, но результат не гарантирую.

Попробуйте написать Bug request разработчикам плагина для Dropbox. Полагаю, что это общая проблема, когда после включения их плагина перестаёт работать функционал загрузки файлов через API Redmine и они должны обратить на это внимание. Сообщите, пожалуйста, когда будут какие-то результаты.

yakhlakov commented 6 years ago

Если указать ключ --referer в curl все работает. С его помощью, видимо, плагин понимает куда складывать файлы в dropbox. Из-за этого и ошибка.

borisershov commented 6 years ago

Скажите, пожалуйста, а какое значение этого ключа Вы указывали?

Если можно, приведите полную команду для curl (разумеется, без указания приватных данных).

yakhlakov commented 6 years ago

Полная команда:

curl --data-binary "@image.png" -H "Content-Type: application/octet-stream" -X POST --referer https://domain.com/issues/1  -u login:pass https://domain.com/uploads.xml
Ответ:
<?xml version="1.0" encoding="UTF-8"?><upload><id>24</id><token>24.d41d8cd98f00b204e9800998ecf8427e</token></upload>
borisershov commented 6 years ago

Да, тогда Вам надо обратиться к разработчикам плагина redmine_dropbox_attachments с описанием данной проблемы. Со своей стороны мы помочь вряд ли сможем, к сожалению.

yakhlakov commented 6 years ago

Ок, в любом случае спасибо. Думаю можно закрывать задачу.

borisershov commented 6 years ago

Не за что, обращайтесь! Если будет возможность - напишите потом чем дело кончилось, пожалуйста.