Rails на EC2 — Puma отвечает, но страница не загружается в браузере

avatar
marcioneto
8 апреля 2018 в 04:14
98
1
1

Во-первых, ура! Это мой первый пост на Stack Overflow, постараюсь не делать глупостей :). Я провел последние 3 дня, ломая голову над этой проблемой и гугля, но так и не нашел решения, каким бы простым оно ни было.

Я настроил новый экземпляр EC2 (под управлением Ubuntu 16.04) и создал новое приложение Rails (v 5.1.6) с помощью простого каркаса:

rails new test_app
cd test_app

В этот момент Rails пожаловался, что мне пришлось установить гем 'listen', что я и сделал (v 3.1.5). Затем я поступил следующим образом:

rails g scaffold article title:string
rails db:create
rails db:migrate

Пока все хорошо. Затем я настроил группы безопасности AWS и правильно разрешил TCP-соединения через порт 3000. В настоящее время я использую Puma (v 3.7) в качестве сервера.

Вот что меня беспокоит: я побежал

rails server

и попытался подключиться к моему EC2 через Chrome через порт 3000. Оказалось, что я смог попасть на обычную страницу "You're on Rails", без проблем, но когда я попытался добраться до любого другие страницы, скажем /articles или /articles/new, Я получил положительный ответ от сервера в консоли:

Started GET "/articles" 
Processing by ArticlesController#index as HTML
Rendering articles/index.html.erb within layouts/application
Article Load (0.7ms)  SELECT "articles".* FROM "articles"
Rendered articles/index.html.erb within layouts/application (47.3ms)
Completed 200 OK in 3912ms (Views: 3807.5ms | ActiveRecord: 1.5ms)

Но браузер вечно ждет ответа. Я также пытался получить доступ к URL-адресу через curl и также не получил ответа. Буду признателен, если кто-нибудь подскажет, какую глупую ошибку я здесь совершаю.

Спасибо,

Марсио

Источник

Ответы (1)

avatar
Haider Ali
8 апреля 2018 в 21:01
0

Во-первых, вы очень хорошо объяснили свою проблему

когда вы развертываете свое приложение на EC2, это неправильный способ, но все же он должен дать вам ответ в браузере. Убедитесь, что ваш порт 3000 не заблокирован. Перейдите в сетевой интерфейс -> внимательно выберите свой экземпляр -> перед группами безопасности проверьте правила для входящего трафика и убедитесь, что порт 3000 открыт

Приведенное выше объяснение предназначено только для того, чтобы ответить на все, что вы пытаетесь сделать. Хотя это не должно быть правильным способом. Правильный способ (вкратце) должен запускать приложение ruby ​​on rails со стоечным сервером (puma, thin и т. д.) за веб-сервером Apache или Nginx.

marcioneto
12 апреля 2018 в 01:59
0

Привет, спасибо за ваш ответ! Действительно, изначально я планировал использовать Nginx в качестве веб-сервера, но, поскольку у меня было такое странное поведение, я попытался создать минимальное приложение и посмотреть, будет ли по-прежнему появляться ошибка. Я проверил группы безопасности, как вы предложили, и кажется, что порт 3000 широко открыт (я добавил 0.0.0.0/0 и ::/0 в поле CIDR). Как вы думаете, это может быть проблема с брандмауэром?