Foreman/Puma не использует указанный порт в dev env
Я устанавливаю порт как 3000 в моем приложении application.yml(figaro управляет переменными env)
rails s
используется порт 3000
но когда я запускаю foreman start
(как рекомендовано Heroku), я получаю следующий вывод
14:53:23 web.1 | started with pid 24425
14:53:23 web.1 | [24425] Puma starting in cluster mode...
14:53:23 web.1 | [24425] * Version 2.11.1 (ruby 2.2.0-p0), codename: Intrepid Squirrel
14:53:23 web.1 | [24425] * Min threads: 5, max threads: 5
14:53:23 web.1 | [24425] * Environment: development
14:53:23 web.1 | [24425] * Process workers: 2
14:53:23 web.1 | [24425] * Preloading application
14:53:24 web.1 | WARNING: Skipping key "PORT". Already set in ENV.
14:53:25 web.1 | [24425] * Listening on tcp://0.0.0.0:5000
14:53:25 web.1 | [24425] Use Ctrl-C to stop
14:53:25 web.1 | [24425] - Worker 0 (pid: 24426) booted, phase: 0
14:53:25 web.1 | [24425] - Worker 1 (pid: 24427) booted, phase: 0
PROCFILE
web: bundle exec puma -C config/puma.rb
конфигурации/puma.rb
workers Integer(ENV['WEB_CONCURRENCY'] || 2)
threads_count = Integer(ENV['MAX_THREADS'] || 5)
threads threads_count, threads_count
preload_app!
rackup DefaultRackup
port ENV['PORT'] || 3000
environment ENV['RACK_ENV'] || 'development'
on_worker_boot do
ActiveRecord::Base.establish_connection
end
конфигурации/application.yml
PORT: "3000"
- Rails 4.2.0
- Форман 0.78.0
- Ruby 2.2.0p0
- Puma 2.11.1
Ответы
Ответ 1
Тайна на пульте puma решена.
Поместите эту печать в свой config/puma.rb
Затем вы увидите, что каким-то образом порт таинственно установлен на 5000, даже если он не находится в вашей ENV.
Исправьте внизу.
puma_port = ENV['PORT'] || 3000
puts "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
puts "puma_port is #{puma_port}"
puts "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
Это выводит
16:49:28 web.1 | ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
16:49:28 web.1 | puma_port is 5000
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
Затем поместите эту строку в свой файл Procfile (не тот, который вы используете для Heroku). У меня есть один под названием Procfile.dev
web: PORT=3000 bundle exec puma -C config/puma.rb
И я запускаю его с помощью этой команды:
foreman start -f Procfile.dev
Ответ 2
Используйте файл .foreman с:
port: 3000
или .env с помощью:
PORT=3000
Любой должен работать, тогда вы можете просто использовать foreman start
Ответ 3
port ENV['PORT'] || 3000
В этой строке говорится, что сначала вы попытаетесь использовать ENV['PORT']
, и если это не существует, вы вернетесь к использованию 3000
в качестве номера порта. Итак, вы определяете переменную среды PORT
где-нибудь до начала foreman
? config/application.yml
переменные среды будут загружаться только после запуска сервера rails, поэтому здесь не нужно указывать номер порта.
Вы можете попробовать добавить
PORT=3000
в файле .env
в корне каталога проекта.
Источник: https://devcenter.heroku.com/articles/getting-started-with-rails5#procfile