When developing a Rails 4.1.6 project, I can start a Webrick server with:
rails s
Before the server has processed any requests, I can:
After the server has processed a request, I can still stop it with control-C, but I can no longer suspend it with control-Z. Typing control-Z echoes "^Z" to the terminal, but the server continues to run and will processes any requests it receives.
Why does control-Z fail to suspend the server once the server has processed a request?
Starting the server:
$ rails s
Warning: NLS_LANG is not set. fallback to US7ASCII.
=> Booting WEBrick
=> Rails 4.1.6 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Notice: server is listening on all interfaces (0.0.0.0). Consider using 127.0.0.1 (--binding option)
=> Ctrl-C to shutdown server
[2014-10-28 15:16:09] INFO WEBrick 1.3.1
[2014-10-28 15:16:09] INFO ruby 2.1.2 (2014-05-08) [i686-linux]
[2014-10-28 15:16:09] INFO WEBrick::HTTPServer#start: pid=29538 port=3000
Control-Z before the server has processed any requests:
$ rails s
Warning: NLS_LANG is not set. fallback to US7ASCII.
=> Booting WEBrick
=> Rails 4.1.6 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Notice: server is listening on all interfaces (0.0.0.0). Consider using 127.0.0.1 (--binding option)
=> Ctrl-C to shutdown server
^Z
[1]+ Stopped rails s
Processing a request:
Started GET "/" for 127.0.0.1 at 2014-10-28 15:18:24 -0700
ActiveRecord::SchemaMigration Load (4.2ms) SELECT "SCHEMA_MIGRATIONS".* FROM "SCHEMA_MIGRATIONS"
(69.1ms) SELECT column_name AS name, data_type AS sql_type, data_default, nullable, virtual_column, hidden_column, data_type_owner AS sql_type_owner, DECODE(data_type, 'NUMBER', data_precision, 'FLOAT', data_precision, 'VARCHAR2', DECODE(char_used, 'C', char_length, data_length), 'RAW', DECODE(char_used, 'C', char_length, data_length), 'CHAR', DECODE(char_used, 'C', char_length, data_length), NULL) AS limit, DECODE(data_type, 'NUMBER', data_scale, NULL) AS scale FROM all_tab_cols WHERE owner = 'DOCUMENT_DIRECTOR_DEVELOPMENT' AND table_name = 'SCHEMA_MIGRATIONS' AND hidden_column = 'NO' ORDER BY column_id
Processing by IndexController#index as JSON
Rendered index/index.json.jbuilder (3.1ms)
Completed 200 OK in 10ms (Views: 9.9ms | ActiveRecord: 0.0ms)
Control-Z after processing a request, pressed many times because I mean business:
^Z^Z^Z^Z^Z^Z
Gemfile:
source 'https://rubygems.org'
source 'http://gems:9292'
gem 'activerecord-oracle_enhanced-adapter',
git: 'https://github.com/wconrad/oracle-enhanced.git',
branch: 'better-system-password-entry'
gem 'apipie-rails'
gem 'capistrano-rails', group: :development
gem 'capistrano-rvm'
gem 'cucumber-rails', :require => false, group: [:test]
gem 'cute_print'
gem 'database_cleaner', group: [:development, :test]
gem 'factory_girl_rails', group: [:development, :test]
gem 'jbuilder'
gem 'jsonpath', group: :test
gem 'maruku'
gem 'newrelic_rpm'
gem 'opacs_billing'
gem 'opacs_db'
gem 'rails'
gem 'rails-erd', group: :development
gem 'retryable'
gem 'rspec-rails', group: [:development, :test]
gem 'ruby-oci8'
gem 'sass-rails'
gem 'sdoc', group: :doc
gem 'simplecov', require: false, group: :test
gem 'spring', group: :development
gem 'versionist'
gem 'yard'
Versions:
In one of the comments you wrote in your question's comment section, you say:
The use case is: control-Z, then "bg" to resume the server in the background, then tail a log.
I think the issue is in putting the server in the background instead of in the foreground (using command fg
). If you put the server in background, the console won't be able to stop it anymore until you put it in the foreground, so CTRL-Z won't work. So, I would try the sequence below:
rails s
fg
(program is resumed)If you want to keep putting your server in the background, then you cand send the STOP signal to it, not by typing CONTROL-Z, but by sending the signal using kill
:
kill -STOP <SERVER_PID>
or
kill -s STOP <SERVER_PID>
(depends on your system).
To resume the process:
kill -CONT <SERVER_PID>
or
kill -s CONT <SERVER_PID>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With