Как запустить сервер rails puma с файлом конфигурации с помощью rails s puma

Я могу запустить сервер puma в рельсах, используя rails s puma или просто puma.

Согласно этому ответу, запуск rails s puma сообщает серверу о среде rails. Он показывает ошибки сервера и т. Д., Которых нет только при запуске puma.

Я хочу установить такой конфигурационный файл:

config / puma.rb

workers Integer(ENV['PUMA_WORKERS'] || 3)
threads Integer(ENV['MIN_THREADS']  || 1), Integer(ENV['MAX_THREADS'] || 16)

rackup      DefaultRackup
port        ENV['PORT']     || 3000
environment ENV['RACK_ENV'] || 'development'

...

Если я запускаю puma -C config/puma.rb, все работает. Однако, если я запускаю rails s puma, я не могу понять, как дать параметры puma. Я пробовал следующее:

rails s puma                     # Puma server works but no config file is passed in.
rails s puma -C config/puma.rb   # Invalid option -C
rails s puma -c config/puma.rb   # Undefined method 'workers'. So rails is
                                 # trying to use the config instead of puma?

Я также попытался разместить файл конфигурации на config/puma/development.rb в соответствии с документами puma.

Ценю любую помощь в этом :)


person Subtletree    schedule 10.08.2014    source источник


Ответы (4)


Невозможно использовать rails s puma для загрузки файла конфигурации puma, как подтверждено здесь https://github.com/puma/puma/issues/512, вы можете рассмотреть аналогичный вопрос здесь Как заставить 'puma' запускаться автоматически, когда я запускаю 'rails server' (как это делает Thin) где это обсуждается

person Robert Christopher    schedule 10.08.2014

Я обнаружил, что использование Foreman (https://github.com/ddollar/foreman) является хорошим решением. для этого, а также дает дополнительную гибкость.

Heroku написал для этого хорошее руководство (https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server). Ниже приведено очень быстрое начало работы.

Шаг 1: установите Foreman. Пример для Mac OS X ниже, полное руководство на сайте Foreman

$ brew install foreman

Шаг 2. Добавьте это в свой Gemfile:

gem 'puma'

Шаг 3. Создайте файл с именем Procfile:

web: bundle exec puma -C config/puma.rb

Шаг 4. Теперь запустите приложение, используя

$ foreman start

00:36:05 web.1  | started with pid 19869
00:36:05 web.1  | [19869] Puma starting in cluster mode...
00:36:05 web.1  | [19869] * Version 2.11.1 (ruby 2.2.1-p85), codename: Intrepid Squirrel
00:36:05 web.1  | [19869] * Min threads: 1, max threads: 1
00:36:05 web.1  | [19869] * Environment: development
00:36:05 web.1  | [19869] * Process workers: 1
00:36:05 web.1  | [19869] * Preloading application
00:36:07 web.1  | [19869] * Listening on tcp://0.0.0.0:3000
00:36:07 web.1  | [19869] Use Ctrl-C to stop
00:36:07 web.1  | [19869] - Worker 0 (pid: 19870) booted, phase: 0
person Jimmy S    schedule 15.03.2015
comment
Linux: пропустите шаг 1 и добавьте gem 'foreman' в Gemfile на шаге 2. - person Andre Figueiredo; 06.06.2017

К сожалению, нет. Сегодня мне нужно было заставить Puma работать с ssl в моей среде разработки, поэтому я отредактировал файл config / puma.rb в моем приложении rails (Rails 5) и добавил:

ssl_bind '127.0.0.1', '3000', {
   key: 'path_to_you_key_file', #/Users/DevRuby/.ssh/server.key
   cert: 'path_to_yout_cert_file', #/Users/DevRuby/.ssh/server.crt
   verify_mode: 'none' #fix errors due to self-signed certificate
}

И добавил в мою конфигурацию / environment / development.rb следующую строку, чтобы разрешить отправку журналов в STDOUT:

config.logger = ActiveSupport::TaggedLogging.new(ActiveSupport::Logger.new(STDOUT))

И вместо того, чтобы запускать мое приложение с использованием #rails s, я теперь использую команду #puma, которая загружает все настройки в файл конфигурации config / puma.rb.

person Fernando Cisneros    schedule 01.09.2016
comment
Привет как у тебя рельсы заводятся от пумы? Я пробовал это, но с #puma работает только puma, а рельсы - нет. - person EJAg; 11.07.2017

Это просто программное обеспечение, вы управляете исполняемым файлом rails в вашем каталоге bin, просто измените его, чтобы он делал то, что вы хотите, и проверьте его.

bin/rails

#!/usr/bin/env ruby
APP_PATH = File.expand_path('../config/application', __dir__)

# We take over the rails s invocation so we can run puma from `rails s` 
# The maintainer refuses to let `rails server` pick up the config for puma
# so we have to call it directly: https://github.com/puma/puma/issues/512
command = ARGV.first&.downcase
exec('SERVER=puma puma') if command == 's' || command == 'server'

require_relative '../config/boot'
require 'rails/commands'

Да, это уродливо, но вы знаете, что не уродливо: не забывайте вызывать puma напрямую, когда все документы по рельсам говорят, что просто звоните rails server.

person trcarden    schedule 15.03.2020