Как отправлять запросы в локальное приложение Rails из локального приложения AngularJS, запущенного на другом порту?

Я занимаюсь разработкой веб-приложения с использованием внешнего интерфейса AngularJS и внутреннего интерфейса Rails.

Моя цель состоит в том, чтобы сохранить эти два понятия совершенно отдельно, поскольку приложение Rails в конечном итоге будет переведено на простой REST-сервер, а внешний интерфейс AngularJS станет лишь одним из нескольких разных клиентов, использующих бэкэнд. По этой причине я не хочу интегрировать интерфейс в конвейер ресурсов Rails или что-то подобное.

Приложение Rails работает локально на порту 3000. Интерфейс использует Gulp для компиляции статических ресурсов и BrowserSync, который содержит сервер разработки, который я запускаю на порту 3001.

В целях разработки, как я могу заставить приложение AngularJS общаться с сервером Rails, избегая этой ошибки браузера (что я и ожидал) при выполнении HTTP-запроса через службу $ http Angular?

No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://localhost:3001' is therefore not allowed access.

Мне просто нужно настроить CORS в приложении Rails? Есть ли другой способ - может быть, какой-то трюк с локальными файлами хостов (я на Mac, FWIW) или что-то подобное? Я спрашиваю, потому что мой коллега отвечает за приложение Rails (у меня ограниченный опыт работы с Rails), но некоторое время не в городе; мои знания в основном ограничены стэком AngularJS, который я настроил.

Я искал и читал около часа, но пока не смог найти ничего, что я мог бы найти, что применимо к моей ситуации. Я мог бы не знать о лучших поисковых терминах.

Спасибо за любую помощь!

1 ответ

Решение

Ах, замечательно. Вот несколько решений:

  1. установить CORS, который не должен быть слишком сложным. Все, что вам нужно сделать, это добавить заголовки к страницам, обслуживающим ваш статический контент (не к конечным точкам REST rails). Проблема в том, что вы не должны делать это, если у вас нет веских причин (см. 3). Как вы обслуживаете статический контент? Там должны быть плагины, чтобы сделать заголовки для вас, если это популярный инструмент
  2. обслуживайте страницы angularJS из бэкэнда рельсов (используя какой-то статический маршрут)
  3. если вы думаете о производстве и хотите разобраться с этим навсегда, используйте nginx, чтобы проксировать две службы в одном домене, http://nginx.org/en/docs/beginners_guide.html
Другие вопросы по тегам