Подтвердить что ты не робот

Meteor.js Spiderable and Iron Router - ошибка волокна на сервере производства

У меня возникли проблемы с подключением Iron Router и Spiderable, прекрасно работающими в моем приложении Meteor.js. Если я тестирую URL с ?_escaped_fragment_= во время работы на моем локальном хосте, все работает правильно, но как только я нажимаю на наш производственный сервер DigitalOcean, я продолжаю получать следующую ошибку при попытке сделать то же самое (проверьте http://hreglobal.com/?_escaped_fragment_=):

Error: Meteor code must always run within a Fiber. Try wrapping callbacks that you pass to non-Meteor libraries with Meteor.bindEnvironment.
at Object.Meteor._nodeCodeMustBeInFiber (packages/meteor/dynamics_nodejs.js:9)
at _.extend.get (packages/meteor/dynamics_nodejs.js:21)
at RouteController.lookupOption (packages/iron:router/lib/route_controller.js:66)
at new Controller.extend.constructor (packages/iron:router/lib/route_controller.js:26)
at ctor (packages/iron:core/lib/iron_core.js:88)
at Function.Route.createController (packages/iron:router/lib/route.js:133)
at Function.Router.createController (packages/iron:router/lib/router.js:185)
at Function.Router.dispatch (packages/iron:router/lib/router_server.js:39)
at Object.router (packages/iron:router/lib/router.js:15)
at next (/opt/hre/bundle/programs/server/npm/webapp/node_modules/connect/lib/proto.js:190:15)

Мы пытались найти причину в течение нескольких дней и начать немного отчаянно. Любые указатели приветствуются!

4b9b3361

Ответ 1

Есть несколько причин для этого:

Если это происходит при производстве, но не локально, это может означать, что у пакета есть проблема минимизации. Чтобы протестировать это, вы можете запустить meteor build --debug, который пропускает минимизацию и развертывание. Или вы можете запускать локально с использованием метеорного запуска, который будет запускаться локально с минимализацией. В любом случае вы должны показать вам, есть ли проблема с минерализацией.

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

Третья проблема с производительностью, но не локальная проблема, связана с неправильным ROOT_URL. Это также стоит проверить быстро. Убедитесь, что ROOT_URL, который настроен для вашего сервера, доступен самому серверу.

Если это происходит как локально, так и на производственном сервере, это может быть вызвано публикацией вызовов, которые неправильно возвращают ready(). Это можно отладить, комментируя подписки на неисправной конечной точке, пока не найдете ошибочное опубликование.

Ответ 2

Являются ли phantomjs установленными/доступными для script на удаленном хосте?

Я установил более сложный пакет:

https://atmospherejs.com/jazeee/spiderable-longer-timeout

который показал мне фактическое сообщение об ошибке вместо нерелевантного Error: Meteor code must always run within a Fiber.

Появился код ошибки:

spiderable: phantomjs not installed. Download and install from http://phantomjs.org/

Вещи начали работать сразу после:

sudo apt-get install phantomjs

Ответ 3

Jut в случае, если это поможет кому угодно в будущем...

Я тоже столкнулся с этой проблемой. Я попробовал все, что мог придумать, и все, что предлагали другие форумы.

Исправление для меня было моим сервером! У меня есть t2.nano с AWS EC2, и я загрузил свои приложения с помощью mup.

Мне потребовалось много времени, чтобы понять, что это причина... но если у меня всего 2 приложения, все работает нормально. Затем я добавил третье приложение, и именно тогда возникли проблемы. Я предполагаю, что до основного сервера, на котором я работал, не было возможности обрабатывать 3 контейнера докеров для моих приложений и четвертый для монго.

У меня всегда были проблемы с загрузкой моего третьего приложения с помощью mup. Я предполагаю, что это может быть частью проблемы.

Итак, дело в том, что ваши публикации и т.д. могут быть в порядке, но время, чтобы получить ответ от самого сервера, а не приложение, может также повлиять на это.