2015-01-08 2 views
2

Я пытаюсь использовать пакет cfs: graphicsmagick для создания эскизов, но все, что сгенерировано, является пустым изображением.Ошибка пакета Graphicsmagick

Когда я начинаю сервер вещи хорошо выглядеть:

I20150108-10:43:14.698(-8)? => GraphicsMagick found 
I20150108-10:43:14.901(-8)? available 
=> Meteor server restarted 

но мне кажется, ГМ не доступен:

if (gm.isAvailable) { 
    console.log("gm is available"); 
} 

и консоль выкидывает ошибку:

Uncaught TypeError: Cannot read property 'isAvailable' of undefined 

ответ

5

Посмотрите на docs, кажется, что область gm доступна только на стороне сервера, поэтому нет возможности м здесь, вы имеете в console.log, довольно найти

теперь вы можете использовать на fsCollection как этот

Images = new FS.Collection("images", { 
stores: [ 
    new FS.Store.FileSystem("images"), 
    new FS.Store.FileSystem("thumbs", { 
    transformWrite: function(fileObj, readStream, writeStream) { 
     // Transform the image into a 10x10px thumbnail 
     gm(readStream, fileObj.name()).resize('10', '10').stream().pipe(writeStream); 
    } 
    }) 
], 
filter: { 
    allow: { 
    contentTypes: ['image/*'] //allow only images in this FS.Collection 
    } 
} 
}); 

запомнить gm его только доступной на сервере, так что используйте его на /server или использования на if(isServer)

Попробуйте

if (Meteor.isServer) { 
     if (gm.isAvailable) { 
     console.log("gm is available and this console.log was printed from my own code"); 
     } 
    } 

Скажите мне, если работы

Update ответ

Если вы объявляете FS.collection как на сервере/клиенте я рекомендую вам объявить сбор на /lib/collection.js как этот

 //collections.js 
     Adopcion = new FS.Collection("Adopcion", { 
stores: [ 
    new FS.Store.FileSystem("images"), 
    new FS.Store.FileSystem("thumbs", { 
    transformWrite: function(fileObj, readStream, writeStream) { 
     // Transform the image into a 10x10px thumbnail 
     gm(readStream, fileObj.name()).resize('10', '10').stream().pipe(writeStream); 
    } 
    }) 
] 
}); 

и на том же файле сделать подписку // collection.js // Подписываем if (Meteor.isClient) { Meteor.subscribe ('Adopcion'); } А теперь /server/publish.js вы только сделать публикацию функции

//Publish methods 
    Meteor.publish('Adopcion', function(){ 
      return Adopcion.find(); 
     }); 

При этом нет никакой необходимости Meteor.methods({}) и первая вещь, которую метеор будет загружать свою коллекцию, и они будут доступны и клиент/сервер

Посмотрите и скажите, если работает для вас

+0

Спасибо, Etjana, вы правы. Я не знал, что gm доступен только на сервере. Я только начинаю, поэтому я еще не знаю, как реализовать gm через сервер. Придется заглянуть в нее. Это [методы] (http://meteortips.com/book/methods/) Мне нужно понять - правильно? – Kai

+0

Проверьте обновление ответа и попробуйте его, надейтесь, что он сработает: D – Ethaan

+0

Все работает нормально, никаких ошибок при запуске. Но затем я получаю повторяющиеся ошибки: GET http: // localhost: 3000/sockjs/info? Cb = 3lkaaq_h3u 503 (Service Unavailable) sockjs-0.3.4.js: 854 AbstractXHRObject._startsockjs-0.3.4.js: 888 (анонимная функция) И сгенерированное эскиз тоже пуст (ноль kb) – Kai

Смежные вопросы