2013-11-20 3 views
3

Я пытаюсь добавить grunt-connect-proxy в проект, в котором используется новейший генератор yoman + angular.Yeoman with grunt-connect-proxy возвращает ошибку ECONNREFUSED

Но, ударяя по дороге, которая должна быть переадресованы (например, 127.0.0.1:9000/api/v1), сервер возвращает эту ошибку:

An error has occurred: {"code":"ECONNREFUSED","errno":"ECONNREFUSED","syscall":"connect"} 

Я использовал модифицированный Gruntfile: same as here в соответствии с рекомендациями.

Как я должен отлаживать это? У кого-то была аналогичная проблема в последнее время с помощью grunt-connect-proxy?

Я также интересуюсь аналогичными решениями для прокси-соединений api для углового webapp, если у вас есть какие-либо действия на самом деле.

Спасибо, что помогли мне! Очень признателен!

ответ

1

Ну, я, наконец, получил его на работу как-то. Но, честно говоря, я не понимаю. Он определенно был связан с localhost не таким же, как 127.0.0.1. Как это закончилось таким образом, у меня нет подсказки ...

Я расскажу, что я узнал, делая это, так как не нашел реального ответа для отладки этого персонала в Интернете. Вот что я узнал:

  • пехотинец имеет --verbose вариант, который может помочь вам увидеть, что происходит на

Если пехотинец-подключения прокси правильно настроен, вы должны увидеть что-то вроде этого при запуске:

 
Running "configureProxies" task 
Proxy created for: /api/v1 to localhost:8000 

В моем случае сервер grunt работал на 127.0.0.1:9000, второй сервер - на localhost:8000. Я проксируемые просьбы на api/v1 так grunt server --verbose будет выводить что-то подобное на каждый проксируемом запросу:

Proxied request: /api/v1/test -> http://localhost:8000/api/v1/test 
{ 
    "host": "127.0.0.1:9000", 
    "connection": "keep-alive", 
    "accept": "...", 
    "user-agent": "...", 
    "accept-encoding": "...", 
    "accept-language": "...", 
    "cookie": "..." 
} 
  • весь смысл использование прокси-сервера, чтобы избежать ненужной конфигурации CORS на второй сервере

Это связано с тем, что после развертывания ваш внешний интерфейс и внутренний код будут сосуществовать на одном сервере (= сервер grunt нужен только в dev time). Я хотел подчеркнуть этот момент, потому что ответ @Ulugbek может предполагать, что вам нужен CORS для работы с grunch-connect-proxy.

  • ECONNREFUSED ошибка происходит, когда ваш второй сервер не отвечает

В моем случае, я обнаружил, что http://127.0.0.1:8000/api/v1/test не реагирует, даже если http://localhost:8000/api/v1/test было. Итак, я немного перепутал с/etc/hosts и решил проблему, убедившись, что обе конечные точки отвечают соответственно.

Такая же ошибка может случиться с вами, если второй сервер не прослушивает проксированную конечную точку.

2

Gruntfile в порядке, ошибка вызвана вашей базой данных, то есть localhost: 3000 (возможно, Rails).

Если это Rails, это проблема CORS. Вы должны разрешить рельсы принимать соединение с сервером grunt. Добавить «в стойке CORS» на ваш Gemfile и настройте его, как это в вашем development.rb конфигурационного файла:

config.middleware.use Rack::Cors do 
    allow do 
    origins 'localhost:9000' 
    resource '*', :headers => :any, :methods => [:get, :post, :options, :delete] 
    end 
end 

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

Working with Angular.js and Rails

+0

Спасибо за ваш ответ. Я фактически использую Laravel 4 в бэкэнд, но это не имеет значения. Я знаю, как решить проблему CORS с Laravel. Я подумал, что точка использования прокси-сервера grunt-connect-это точно НЕ добавить определенную настройку CORS на бэкэнд, так что ваш производственный код действует одинаково в этом отношении. – Dream4ge

+0

Да, я тоже так думал, но не смог заставить его работать с Rails, пока я явно не разрешил доступ с grunt (получил ту же ошибку). Возможно, в этом и проблема. Для меня это помогло серверу Rails иметь полный отладочный инструмент в командной строке. Вы можете видеть, действительно ли запрос достигает вашего исходного кода? – Ulugbek

+0

Запрос никогда не достигает бэкэнда, видимо. Я использовал Fiddler, чтобы отследить его, и я также вручную зарегистрировал любой запрос, который достигает моего бэкэнда. Кажется, что сервер соединения grunt выбрасывает 500, с сообщением, упомянутым выше, и ни один запрос никогда не достигает моего бэкэнд в соответствии с журналами. Кроме того, я также добавил CORS на бэкэнд. Когда я делаю запрос на localhost: 3000 напрямую, все работает нормально. Он перестает работать, когда я делаю то же самое на localhost: 9000 (который должен быть перенаправлен в соответствии с моей конфигурацией прокси). – Dream4ge

2

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

Мне удалось получить пример использования grunt-conenct-proxy, используя предыдущий пример Rails: Working with Angular.js and Rails, однако при попытке локально подключиться к моему серверу laravel я всегда получал ошибку ECONNREFUSED.

Единственная реальная разница, которую я мог видеть, заключалась в том, что сервер рельсов вращался на 0.0.0.0. где, когда мой сервер apache работал на localhost/127.0.0.1. После изменения моей конфиги для моего апача разъединяет работать на 0.0.0.0 с помощью:

php artisan serve --host 0.0.0.0 

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

+0

У меня был JS, работающий через тестирование узлов PHP, работающий через Artisan на Travis (длинная история). Это тоже решило проблему. –

+0

С рельсами backend, я смог разрешить это, используя 0.0.0.0. Я не эксперт в сети unix, поэтому я не знаю, почему это работает, но для локального сервера Rails вам необходимо передать флаг '--binding =' в 'rails server'. 'rails server --binding = 0.0.0.0' Выше работал для меня! Больше ошибок ECONNREFUSED. – danielricecodes

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