2015-04-10 13 views
2

Эта проблема появляется только на стадии производства, этап разработки - работает как шарм.Meteor's CollectionFS download Ошибка: напишите после конца

Когда пользователь пытается загрузить файл по ссылке выручено помощнику:

<a href="{{fileRef.url download=true}}">Download</a> 

На стороне сервера Node.js есть сбой и forever перезапускает его, с вторя эту ошибку:

Error: write after end 
    at ServerResponse.OutgoingMessage.write (_http_outgoing.js:413:15) 
    at ServerResponse.http.OutgoingMessage.write (packages/meteorhacks:inject-data/lib/server.js:56:1) 
    at ServerResponse.res.write (/var/node/bundle/programs/server/npm/webapp/node_modules/connect/lib/middleware/compress.js:110:17) 
    at ServerResponse.res.end (/var/node/bundle/programs/server/npm/webapp/node_modules/connect/lib/middleware/compress.js:116:14) 
    at sendResponseIfDone (packages/cfs:http-methods/http.methods.server.api.js:543:1) 
    at IncomingMessage.<anonymous> (packages/cfs:http-methods/http.methods.server.api.js:568:1) 
    at IncomingMessage.emit (events.js:104:17) 
    at _stream_readable.js:908:16 
    at process._tickCallback (node.js:355:11) 
error: Forever detected script exited with code: 1 
error: Script restart attempt #1 

На клиенте файл загружен только частично, я думаю - только первый кусок. Мы попытались изменить кеширование обратного прокси-сервера nginx, настройки буферов, даже выключить - не помогает вообще.

Любая идея, как исправить, или где искать ошибки? Любая помощь очень ценится.

Collection Код инициализации:

path = (if (NODE_ENV is "development") then "/uploads/Addresses" else "/builded/bundle/programs/server/assets/app/uploads/Addresses") 

Collections.Addresses = new FS.Collection 'Addresses', 
    stores: [ 
     new FS.Store.FileSystem 'Addresses' , 
     path: path 
    ] 
, 
    filter: 
    allow: 
     extensions: ['xls', 'xlsx'] 

if Meteor.isServer 
    Meteor.startup -> 
    Collections.Addresses.allow 
     insert: (userId) -> 
     return checkFunc userId 
     remove: (userId) -> 
     return checkFunc userId 
     update: (userId) -> 
     return checkFunc userId 
     download: (userId) -> 
     return checkFunc userId 

    Meteor.publish 'Addresses', (ProjectID) -> 
    check ProjectID, Mongo.ObjectID 

    if checkFunc this.userId 
     Collections.Addresses.find 
     'metadata.project_id': ProjectID 
    else 
     throw new Meteor.Error 403, 'Permission denied' 
+0

Не могли бы вы сообщить нам версию модулей, которые вы используете? –

ответ

0

@ Тристан-foureur Спасибо за ответ. Но мы застряли в этом пакете, и это значительно замедляет наше приложение, не поддерживает нелатинские символы в имени файла и имеет ограничения на загрузку/загрузку больших файлов.

Мы провели две недели для исследования и создали наш собственный пакет: Meteor-Files. Он гладкий и простой в использовании. Ваши руки развязаны, вы можете делать что-либо с загруженными файлами, изменять, изменять размер изображений и даже хранить их в GridFS, если хотите.

Мы надеемся, что наш пакет поможет решить простую задачу как загрузку/загрузку файлов другим разработчикам. Метеориты объединяются!

+1

Ох, ДА! Я создал собственное решение для выхода из CFS, но это не здорово. Я взгляну. – Gaelan