приложение для разработки rails не поддерживает JS последовательно с nginx proxy_pass на разных платформах - PullRequest
0 голосов
/ 25 апреля 2018

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

В течение многих лет выкладывали «демо» приложения где-то в моей сети, чтобы другие люди могли посмотреть на них.и дайте мне отзыв.Первоначально это было на моем ноутбуке с приложением для разработки, работающим на каком-то высоком порту, и мой маршрутизатор перенаправлял этот порт на мой ноутбук.Я установил несколько приложений на других платформах (MacMini, RaspberryPI, Linux) и имел порт 80 nginx proxy_pass для этой платформы.На прошлой неделе я попытался упростить свой процесс и поместить все демонстрационные версии в MacMini, где я столкнулся с проблемами с некоторыми приложениями, не работающими в этом jQuery, которые не были найдены или загружены в некоторые демонстрационные версии, обычно те, которые имели Zurb Foundation.

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

  • Моя конфигурация nginx
  • Среда разработки Rails
  • МояФайлы манифеста JS / CSS
  • Foundation
  • Проблемы OSX spring / file_watcher

Для документирования этого у меня есть одно приложение (тот же код из git pull, изрядное количествоJS и просто немного базовых основ), работающих на трех платформах.MacMini работает 10.13.4 (высокая Сьерра, но я прошел 10.12.2 и 10.12.6 за последние несколько дней).MacBook Air работает 10.12.6.Расберрианская ОС (Debian 9), работающая в VirtualBox на MacMini.[foundation-rails (6.4.3.0), rails (5.1.6), jquery-rails (4.3.3)]

Базовая конфигурация nginx одинакова для всех трех, за исключением имени_сервера и номера порта.Я пробовал различные настройки, но ни одна из них не исправила мою проблему.

server {
  server_name bingo2.mydomain.us;

  location / {
    proxy_redirect     off;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-NginX-Proxy true;
    proxy_pass http://10.0.1.104:8604/;
  }
}

Мои файлы манифеста JS / CSS в настоящее время находятся ниже.Я перемещал вещи вокруг, пытаясь удостовериться, что у меня был правильный заказ и параметры, установленные для продавца.Для файла CSS я удалил запись require foundation_and_overides, поскольку она находится в дереве и не имеет никакого эффекта, думаю, что она была оставлена ​​от более старой версии Foundation.

// This is a JS manifest file that'll be compiled into application.js, which will include all the files
// listed below.

//
//= require rails-ujs
//= require jquery
//= require foundation
//= require_tree .

$(document).foundation();

/*
 * This is a css manifest file that'll be compiled into application.css, which will include all the files
 * listed below.
 *
 *= require_self
 *= require foundation_and_overrides
 *= require_tree .

 */

У меня изначально были приложенияработает в простой среде разработки, но обнаружил потенциальную ошибку (https://github.com/rails/rails/issues/26158), которая указывает на проблему с файловой системой OSX. Чтобы обойти эту проблему, нужно было удалить file_watcher, поэтому я создал «демонстрационную» среду, которая представляет собой просто среду разработки судалены гемы и конфиг наблюдателя файлов.

Я запускаю приложения с rails s -p 8604 -e demo -b 0.0.0.0 -d и запускаю приложения с bingo{1,2}.mydomain.us.

В результате оба Mac отказывают из-за ошибок веб-консоли

 [Error] Failed to load resource: The network connection was lost. (foundation_and_overrides.self-d1f959e72f9d5d6603cd707629d1e6b8df8a5731363c48252b8b10028591a11a.css, line 0)
 [Error] ReferenceError: Can't find variable: jQuery
  (anonymous function) (foundation.core.self-f3c7f9657e3fa857b22c08af6fe5c52df6f2ad4f5b85268319d47c1be483353d.js:74)
  __webpack_require__ (foundation.core.self-f3c7f9657e3fa857b22c08af6fe5c52df6f2ad4f5b85268319d47c1be483353d.js:21)
  ...

Если я вычеркну nginx из уравнения и нажму на локальные порты напрямую (10.0.1.104:8604), все платформы будут работать (но вы когда-нибудь просили кого-нибудь, не имеющего технического опыта, взглянуть на что-то навеб-сайт, использующий порт # !, это сбивает их с толку, не говоря уже о том, что они хотят поставить www в URL)

Конечно, OSX кажется основной проблемойlem, но только с proxy_pass.

У кого-нибудь есть идеи или что-то отсутствует в моей настройке?Полагаю, я мог бы просто настроить промежуточные среды и развернуть приложения, но простое git push and pull кажется намного проще для того, что я хотел сделать.

Большинство похожих вопросов о том, что nginx не обслуживает JS, остаются без ответа или исправляется простая ошибка.

1 Ответ

0 голосов
/ 27 апреля 2018

Через пару дней без ответа я выкопал еще немного и нашел что-то, что работает.

Фонд Zurb всегда представлял проблемы. Я давно отказался от турбо ссылок. Это просто не очень хорошо с ним работает, но, избавившись от всего, что было в файлах манифеста, кроме того, что требовалось, я дошел до одной ошибки javascript, сказав, что он не может найти основы. Посмотрев на $(document).ready против $(window).load, я изменил манифест javascript на:

//= require rails-ujs
//= require jquery
//= require foundation
//= require_tree .

$(window).load(function() {
    //Fires when the page is loaded completely
    $(document).foundation();
});

Я думаю, что все не было загружено, когда был сделан фундаментальный вызов. `$ (документ). Уже просто не делал трюк.

Это все еще не отвечает, почему он работает на Linux, а не MacOSX.

EDIT

За исключением того, что это вызвало ошибку при использовании Chrome!

net::ERR_CONTENT_LENGTH_MISMATCH

Я добавил proxy_buffering off; в папку nginx.

...