Серверные последние активы/представления автоматически

Я запускаю SailsJS в продакшене с forever, и до сих пор разработка работала отлично. Но, исходя из фона PHP, кажется, что некоторые вещи все еще не работают так гладко в производстве. Одна из самых больших проблем, с которыми мы столкнулись в последнее время, — это когда вы обновляете актив или представление (в нашем случае файл ejs), сервер должен быть перезапущен, чтобы обслуживать последние файлы.

Одно решение, которое я мог бы использовать с парусами, — это запустить ворчливую наблюдательную задачу в продакшене или использовать навсегда -w, но оба варианта кажутся немного неестественными, поскольку приходится «следить» за изменениями файлов, а не просто отображать последние.

Не уверен, что это проблема только с Sails, но я предполагаю, что это скорее общая проблема с Express и Node. Итак, есть ли способ заставить сервер Sails/Express/Node всегда отображать новейшие активы/файлы/представления без необходимости явного наблюдения за ними?


person Markus    schedule 24.08.2014    source источник


Ответы (1)


Express должен отображать шаблон на лету — возможно, я что-то упустил в настройке SailsJS. Если это так, этот вопрос может помочь: Sails Приложение .js не обновляет файлы из ресурсов после запуска.

Что касается других вещей в этой области, которые могут работать не так гладко:

В типичной настройке, возможно, в отличие от PHP, вы должны развернуть весь сайт, а не только один файл. В основном это связано с тем, что вы используете Node.JS как автономную службу и хотите, чтобы все, что относится к этому экземпляру, было упаковано вместе в каждом развертывании. Не говоря уже о том, что вы, вероятно, никогда не захотите беспокоиться о накладных расходах, связанных с мониторингом файловой системы на наличие изменений, поэтому такое поведение наиболее полезно в среде разработки.

Это также означает, что если вы обслуживаете статические файлы, вам, вероятно, следует настроить свой веб-сервер так, чтобы он обслуживал их напрямую из файловой системы, а не позволять вашему приложению узла обслуживать их. Фактически, одно только это может сократить время загрузки вашего ресурса в 5-10 раз.

Настройка, которую я обычно использую для своих приложений, такова: git для развертывания вашего приложения (используя хук post-receive) и daemontools, чтобы убедиться, что служба остается в рабочем состоянии. Это даст вам удобную настройку развертывания, аналогичную Heroku или Nodejitsu.

Я считаю, что это обычная установка для производственных систем Node.JS. И после моего собственного исследования того, что было доступно около года назад, на самом деле не было ничего, что я бы считал надежным и надежным (включая Forever) с точки зрения того, какие годы *nix сообщество уже выполнило.

daemontools намного превосходит даже многие другие менеджеры сервисов *nix, но он не используется повсеместно, потому что его автор, DJB, считает, что программное обеспечение не должно заниматься такими вещами, как сервис. Именно это делает его идеальным для приложений Node.JS, хотя и немного менее идеальным для многих приложений Unix, которые все еще создаются как автономные сервисы (хотя многие программы могут работать с daemontools, позволяя не- режим демона, не все программное обеспечение будет, а это означает, что дистрибутивы должны разрабатывать свои собственные решения).

При этом вы не всегда можете гарантировать, что служба не выйдет из строя с узлом, и что эти сбои не загрязнят ресурсы сервера, даже если вы сможете их «поймать». Почти лучше работает запись исключений в журнал или электронное письмо, позволяющая службе дать сбой, залог и очистку, а затем daemontools автоматически отключит ее. Подробнее об обработке ошибок в Node.JS можно прочитать здесь: http://nodejs.org/api/domain.html

person Bobby    schedule 25.08.2014
comment
SailsJS отображает шаблон на лету, пока вы находитесь в режиме разработки. Причина, по которой это было бы действительно полезно в рабочей среде, заключается в том, что мы обслуживаем приложение Ember через шаблон, поэтому вам просто нужно обновить приложение — и вообще не трогать сервер. Что, похоже, будет работать только при постоянном просмотре шаблонов, верно? Спасибо за этот подробный ответ, я посмотрю на daemontools. Я только что нашел github.com/Unitech/PM2, который выглядит великолепно с точки зрения функций, но, очевидно, не так стабилен. как демонтулс. - person Markus; 25.08.2014
comment
Также вы упоминаете об обслуживании статических файлов с помощью веб-сервера. Таким образом, вы бы в основном запускали nginx поверх узла и просто проксировали запросы? - person Markus; 25.08.2014
comment
Это правильно про прокси Nginx. Пример можно найти здесь: blog.argteam.com/coding/. Я немного поиграл с PM2 и после большого разочарования не смог заставить его правильно работать с моим развертыванием. Мне понравились функции, хотя, возможно, стоит изучить их, поскольку они, возможно, появились с тех пор. - person Bobby; 25.08.2014
comment
Я поигрался с PM2, и у него есть несколько действительно хороших функций, и кажется, что за последние месяцы просмотра было проделано много работы. Возвращаясь к моим вопросам, похоже, что в настоящее время нет другого способа обновить шаблоны/представления в рабочей среде, кроме просмотра или использования функциональности PM2 reload. Но, возможно, это strongloop.com/strongblog/ - это реальный ответ на мой вопрос (кроме части nginx, конечно) - person Markus; 25.08.2014
comment
Я полагаю, что это также дает мне ответ на мой вопрос: blog.argteam.com/coding/, который, если я правильно понимаю, имеет несколько схожую идею с тем, как PM2 делает это за вас. О, и еще раз спасибо за ваши ссылки и ответы karma0. - person Markus; 25.08.2014