web-dev-qa-db-ja.com

'Rails spuma'を使用して設定ファイルを使用してRails pumaサーバーを実行する方法

Rails s pumaまたはpumaのいずれかを使用して、Rails)でピューマサーバーを実行できます。

この回答 によると、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を実行すると、プーマにオプションを与える方法がわかりません。私は以下を試しました:

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?

puma docs のように、設定ファイルをconfig/puma/development.rbに配置してみました。

これに関する助けに感謝します:)

15
Subtletree

ここで確認されているように、Rails s pumaを使用してpuma構成ファイルをロードすることはできません https://github.com/puma/puma/issues/512 、ここで同様の質問を見てください 「Railsサーバー」を実行すると、「puma」を自動的に開始するにはどうすればよいですか(Thinのように) これについて説明します

13

Foreman( https://github.com/ddollar/foreman )を使用することは、これに対する優れた回避策であり、柔軟性も向上することがわかりました。

Herokuは、このための優れたガイドを作成しました( https://devcenter.heroku.com/articles/deploying-Rails-applications-with-the-puma-web-server )。非常に簡単な開始方法を以下に示します。

ステップ1:Foremanをインストールします。以下のMacOS 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
7
Jimmy S

残念ながらできません。今日、開発環境でsslを使用してPumaを動作させる必要があったため、Rails application(Rails 5)でconfig/puma.rbファイルを編集し、次を追加しました。

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
}

そして、私のconfig/environment/development.rbに次の行を追加して、ログをSTDOUTに送信できるようにします。

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

そして、#Railsを使用してアプリケーションを起動する代わりに、config /puma.rb構成ファイルのすべての設定をロードするコマンド#pumaを使用しています。

2

これは単なるソフトウェアであり、binディレクトリのRails実行可能ファイルを制御し、必要に応じて変更してチェックインするだけです。

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'

ええ、それは醜いですが、醜いものではないことを知っています。すべてのRailsドキュメントがRails server

0
trcarden