Ruby
Rails
Rails6

Rails6 のちょい足しな新機能を試す13(rails server --log-to-stdout 編)


はじめに

Rails 6 に追加されそうな新機能を試す第13段。 今回のちょい足し機能は、 rails server --log-to-stdout 編です。

rails s (rails server) コマンドに --log-to-stdout, --no-log-to-stdout オプションが追加されて、ログを標準出力する、しないを切り替えられるようになりました。

記載時点では、Rails は 6.0.0.rc1 です。 gem install rails --prerelease でインストールできます。

$  rails --version

Rails 6.0.0.rc1


プロジェクトを作成する

rails プロジェクトを作成します。

$ rails new sandbox6_0_0rc1

$ cd sandbox6_0_0rc1


必要に応じて config/database.yml を書き換えたり環境変数を追加する

今回は、production 環境も使いますので、DBの環境に合わせて必要に応じて config/database.yml を書き換えるか環境変数を追加するなどしてください。


config/database.yml

production:

<<: *default
database: sandbox6_0_0rc1_production
username: sandbox6_0_0rc1 # ここを書き換えるかDBにsandbox6_0_0rc1 ユーザーを追加する
password: <%= ENV['SANDBOX6_0_0RC1_DATABASE_PASSWORD'] %> # ここを書き替えるか、SANDBOX6_0_0RC1_DATABASE_PASSWORD 環境変数を追加する


db:create を実行する

bin/rails db:create を実行します。(sqlite3を使っている場合は実行しなくても大丈夫かも知れません。)

$ bin/rails db:create

$ bin/rails db:create RAILS_ENV=production


bin/rails s --help でオプションが追加されていることを確認

bin/rails s --help を実行すると一番最後に、 --log-to-stdout, --no-log-to-stdout が出力されていることがわかります。

# rails s --help

Usage:
rails server -u [thin/puma/webrick] [options]

Options:
-e, [--environment=ENVIRONMENT] # Specifies the environment to run this server under (test/development/production).
-p, [--port=port] # Runs Rails on the specified port - defaults to 3000.
-b, [--binding=IP] # Binds Rails to the specified IP - defaults to 'localhost' in development and '0.0.0.0' in other environments'.
-c, [--config=file] # Uses a custom rackup configuration.
# Default: config.ru
-d, [--daemon], [--no-daemon] # Runs server as a Daemon.
-u, [--using=name] # Specifies the Rack server used to run the application (thin/puma/webrick).
-P, [--pid=PID] # Specifies the PID file.
# Default: tmp/pids/server.pid
-C, [--dev-caching], [--no-dev-caching] # Specifies whether to perform caching in development.
[--early-hints], [--no-early-hints] # Enables HTTP/2 early hints.
[--log-to-stdout], [--no-log-to-stdout] # Whether to log to stdout. Enabled by default in development when not daemonized.


bin/rails s を実行する

まずは、development 環境で rails s を実行します。

$ bin/rails s -b 0.0.0.0

=> Booting Puma
=> Rails 6.0.0.rc1 application starting in development
=> Run `rails server --help` for more startup options
Puma starting in single mode...
* Version 3.12.1 (ruby 2.6.3-p62), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop

ブラウザで http://localhost:3000 にアクセスしてみます。

標準出力に以下が表示されます。

Started GET "/" for 172.19.0.1 at 2019-05-08 12:15:53 +0000

Processing by Rails::WelcomeController#index as HTML
Rendering /usr/local/bundle/gems/railties-6.0.0.rc1/lib/rails/templates/rails/welcome/index.html.erb
Rendered /usr/local/bundle/gems/railties-6.0.0.rc1/lib/rails/templates/rails/welcome/index.html.erb (Duration: 6.2ms | Allocations: 310)
Completed 200 OK in 14ms (Views: 7.2ms | ActiveRecord: 0.0ms | Allocations: 5963)


rails -s --no-log-to-stdout でログの標準出力を抑制

development 環境で、 --no-log-to-stdout を実行します。

$ bin/rails s -b 0.0.0.0

=> Booting Puma
=> Rails 6.0.0.rc1 application starting in development
=> Run `rails server --help` for more startup options
Puma starting in single mode...
* Version 3.12.1 (ruby 2.6.3-p62), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop

ブラウザで http://localhost:3000 にアクセスしてみます。

標準出力には以降、何も表示されません。


rails -s -e production を実行

production 環境で立ち上げます。

$ bin/rails s -b 0.0.0.0 -e production

=> Booting Puma
=> Rails 6.0.0.rc1 application starting in production
=> Run `rails server --help` for more startup options
Puma starting in single mode...
* Version 3.12.1 (ruby 2.6.3-p62), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: production
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop

ブラウザで http://localhost:3000 にアクセスしてみます。

ブラウザには、


The page you were looking for doesn't exist.


と表示されますが、コンソールには何も表示されません。


rails -s -e production --log-to-stdout を実行

production 環境で --log-to-stdout オプションつきで実行します。

$ bin/rails s -b 0.0.0.0 -e production --log-to-stdout

=> Booting Puma
=> Rails 6.0.0.rc1 application starting in production
=> Run `rails server --help` for more startup options
Puma starting in single mode...
* Version 3.12.1 (ruby 2.6.3-p62), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: production
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop

ブラウザで http://localhost:3000 にアクセスしてみます。

ブラウザには、


The page you were looking for doesn't exist.


と表示され、コンソールにもエラーが表示されます。

I, [2019-05-08T12:29:44.005167 #1535]  INFO -- : [ebc6915e-973c-4769-ab02-88e4f8d8e0cf] Started GET "/" for 172.19.0.1 at 2019-05-08 12:29:44 +0000

F, [2019-05-08T12:29:44.008346 #1535] FATAL -- : [ebc6915e-973c-4769-ab02-88e4f8d8e0cf]
[ebc6915e-973c-4769-ab02-88e4f8d8e0cf] ActionController::RoutingError (No route matches [GET] "/"):
[ebc6915e-973c-4769-ab02-88e4f8d8e0cf]
[ebc6915e-973c-4769-ab02-88e4f8d8e0cf] actionpack (6.0.0.rc1) lib/action_dispatch/middleware/debug_exceptions.rb:36:in `call'
... (以下略)


参考情報