2015-07-09 4 views
2

У меня есть этот код в моем проекте Meteor на сервере. Он загружает файл шрифта в генерирующую PDF пакет:process.env.PWD не работает при развертывании mupx

doc.font(process.env.PWD + '/public/[...]');

Это прекрасно работает на моей локальной машине, но в развертывании я получаю эту ошибку вошли:

Error: ENOENT, no such file or directory '/bundle/bundle/public/[...]'

пакет PDF использует fs.readFileSync, чтобы попытаться прочитать этот файл.

Я развертываю с помощью mupx [ветвь Dev Meteor Up, которая использует Docker].

Почему process.env.PWD больше не правильно ссылается на правильный корень моего проекта? Является ли проблема связана со сценариями сборки, которые mup [x]/Meteor делает для создания производственных версий приложений Meteor?

+0

Вы нашли хороший способ решить это? Мы сталкиваемся с теми же проблемами здесь ... – thomasf1

+0

@ thomasf1 мы используем подход в моем ответе ниже, кажется, что это хорошо через одно обновление mupx, но мы удерживаем обновления метеоров для этого проекта. Если вы можете придумать что-то лучше, пожалуйста, оставьте и ответьте на этот вопрос. – iiz

ответ

0

Я не могу найти, как это сделать/возможно, для этого не существует способа Метеор. Таким образом, мое текущее решение для проверки производства/разработки и установить переменную для префикса:

if (process.env.NODE_ENV === 'development') { 
    prefix = process.env.PWD + '/public'; 
} else { 
    prefix = '/bundle/bundle/programs/web.browser/app'; 
} 

Эта переменная Приставка получает вас/общественное

+0

Я оставляю это непринятым в течение нескольких дней, если у других есть более хорошие ответы. – iiz

+0

У меня такая же проблема. Похоже, что компилятор переводит процесс. * Переменные при создании метеоритов. Это то, что я нашел, когда я изучил файлы сборки. Вы нашли исправление? –

+0

Забыл принять мой/этот ответ после того, как никаких альтернатив не было представлено. @DeepakMittal теперь принятый ответ сработал для нас – iiz

0

По умолчанию общедоступный каталог обычно находится что-то вроде ./programs/web.browser/app/ для приложения Mup.

Частный каталог, на мой взгляд, находится по адресу ./programs/server/assets/app/.

Итак, используя структуру файлов на стороне сервера - (очевидно, это выполняется на основе сервера, например Meteor.methods) и частных файлов (поместите свои шрифты в /private/fontfile.xss).

var font_file_name = 'fontfile.xxx'; 
var server_root = Npm.require('fs').realpathSync(process.cwd()); 
var font_path = server_root + '/assets/app/' + font_file_name; 

Это должно работать как на серверах, так и на локальных операциях.

+0

. RealpathSync (process.cwd()) дает «/Users/x/Dev/rentkit/.meteor/local/build/programs/server "на dev, который не является корнем проекта, но каталог сборки ... – thomasf1

0

решаемые это следующим образом:

Meteor.startup(function() { 
    routePath = fs.realpathSync('./../../../../../public'); 
}) 

но вместо public я использовал .uploads. Создание .uploads на уровне проекта рядом с общественностью. Преимущество в том, что ваше приложение Meteor не наблюдает за загрузками для изменений каждый раз.

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

  • Нет связанных вопросов^_^