Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Spring hangs a lot #396

Closed
mockdeep opened this issue Mar 19, 2015 · 59 comments · Fixed by #623
Closed

Spring hangs a lot #396

mockdeep opened this issue Mar 19, 2015 · 59 comments · Fixed by #623

Comments

@mockdeep
Copy link

We've been having a lot of problems with spring hanging on our systems. I started outputting to a log and here's what I see:

[2015-03-19 14:27:01 -0700] [21417] [application:test] initialized -> running
/home/fletch/.rvm/gems/ruby-2.1.5/gems/spring-1.3.3/lib/spring/application.rb:286:in `read': stream closed (IOError)
    from /home/fletch/.rvm/gems/ruby-2.1.5/gems/spring-1.3.3/lib/spring/application.rb:286:in `block (2 levels) in with_pty'
[2015-03-19 14:27:01 -0700] [12838] [application_manager:test] child 21417 shutdown
[2015-03-19 14:27:01 -0700] [21531] [application:test] preloading app
[2015-03-19 14:27:06 -0700] [21531] [application:test] initialized -> running
/home/fletch/.rvm/gems/ruby-2.1.5/gems/spring-1.3.3/lib/spring/application.rb:286:in `read': stream closed (IOError)
    from /home/fletch/.rvm/gems/ruby-2.1.5/gems/spring-1.3.3/lib/spring/application.rb:286:in `block (2 levels) in with_pty'

I haven't got a strong idea of what is causing it just yet, though it seems to come up if we change git branches and the like, so maybe some sort of file changes are causing it to just lock up. We have to run spring stop and start over.

@ulfmagnetics
Copy link

+1 also seeing a lot of hangs on OS X Yosemite.

@mockdeep
Copy link
Author

I'm on Linux Mint, though other users at our company are seeing it on Mac as well. Something as simple as changing branches can cause it:

[2015-03-26 12:20:36 -0700] [10899] [application:development] running -> watcher_stale
[2015-03-26 12:20:36 -0700] [10899] [application:development] watcher_stale -> exiting
[2015-03-26 12:20:36 -0700] [10896] [application_manager:development] child 10899 shutdown
[2015-03-26 12:20:36 -0700] [11147] [application:development] preloading app
[2015-03-26 12:20:42 -0700] [11147] [application:development] initialized -> running
/home/fletch/.rvm/gems/ruby-2.1.5/gems/spring-1.3.3/lib/spring/application.rb:286:in `read': stream closed (IOError)
    from /home/fletch/.rvm/gems/ruby-2.1.5/gems/spring-1.3.3/lib/spring/application.rb:286:in `block (2 levels) in with_pty'
[2015-03-26 12:20:53 -0700] [10896] [server] accepted client
[2015-03-26 12:20:53 -0700] [10896] [server] running command rails_console
[2015-03-26 12:20:53 -0700] [11180] [client] sending command

@mockdeep
Copy link
Author

Ctrl+C won't get me out of it, either. I have to kill the process from elsewhere.

@ulfmagnetics
Copy link

Yes, this is exactly my issue. When I log to a file by setting SPRING_LOG, then change branches, I see the above sequence of messages appear (running -> watcher_stale, watcher_stale -> exiting, preloading app, etc.) After that, a call to bin/rspec hard-hangs and has to be killed from another shell.

23:05:13 john ~/src/sandbox [master] $ ruby -v
ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-darwin14.0]
23:09:06 john ~/src/sandbox [master] $ spring --version
Spring version 1.2.0

@mscoutermarsh
Copy link

This is happening to me as well. For now I've added a post-checkout hook to call spring stop.

@sunnyrjuneja
Copy link

I am also experiencing this problem. I have to kill Spring processes that are consuming a lot of CPU even though bin/spring stop says there are no spring processes running.

@bborn
Copy link

bborn commented Apr 24, 2015

+1 Spring status says Spring is not running (because I stopped it), but ps shows Spring processes still going.

@terracatta
Copy link

though it seems to come up if we change git branches and the like, so maybe some sort of file changes are causing it to just lock up

+1

Can confirm switching branches in our app (which has "a lot" of stuff in /lib) causing spring to hang even on rake commands. I have to run spring stop in another terminal tab to kill the process so I can proceed. Also considering a post-checkout hook to call spring stop

@jafrog
Copy link

jafrog commented May 11, 2015

After a lot of tinkering I was able to figure out why it happens, at least in my case.

First, Spring hangs when checking out a branch that has changes in one of the monitored files: Gemfile or config files. In this case Spring reloads an application on background. If your application prints any warnings on initialise the process will wait to access STDOUT which never happens as Spring's application process runs on background. In my case the solution was to disable warnings with $VERBOSE=nil on top of the config/application.rb because the app wasn't trying to print anything but warnings. But of course it won't do if you want to keep seeing warnings.

@jonleighton
Copy link
Member

@jafrog can you point to the line of code where spring hangs?

@jafrog
Copy link

jafrog commented May 12, 2015

@jonleighton For me it was here, right when Rails app is loaded

@jafrog
Copy link

jafrog commented May 17, 2015

Looks like the bug was related to STDERR buffer overflow with warnings and was fixed in 1.3.0 (acceptance test) I was able to reproduce it with 1.2.0 but 1.3.6 works fine.

@mockdeep
Copy link
Author

Hmm, I'm still seeing some hangs. I just changed branches and ran spring rake db:migrate and after a few minutes nothing had happened. Running version 1.3.6. Here are the logs just before the most recent lock up. The stack trace is when I ran spring stop from another terminal:

[2015-05-27 12:02:20 -0700] [20277] [server] accepted client
[2015-05-27 12:02:20 -0700] [20277] [server] running command rake
[2015-05-27 12:02:20 -0700] [20708] [client] sending command
[2015-05-27 12:02:20 -0700] [20281] [application:development] got client
[2015-05-27 12:02:20 -0700] [20281] [application:development] forked 20712
[2015-05-27 12:02:20 -0700] [20277] [application_manager:development] got worker pid 20712
[2015-05-27 12:02:20 -0700] [20708] [client] got pid: 20712
[2015-05-27 12:02:36 -0700] [20281] [application:development] 20712 exited with 0
[2015-05-27 12:02:36 -0700] [20708] [client] got exit status 0
[2015-05-27 12:29:23 -0700] [20281] [application:development] running -> watcher_stale
[2015-05-27 12:29:23 -0700] [20281] [application:development] watcher_stale -> exiting
[2015-05-27 12:29:23 -0700] [20277] [application_manager:development] child 20281 shutdown
[2015-05-27 12:29:23 -0700] [22234] [application:development] preloading app
[2015-05-27 12:29:29 -0700] [22234] [application:development] initialized -> running
/home/fletch/.rvm/gems/ruby-2.1.6/gems/spring-1.3.6/lib/spring/application.rb:286:in `read': stream closed (IOError)
    from /home/fletch/.rvm/gems/ruby-2.1.6/gems/spring-1.3.6/lib/spring/application.rb:286:in `block (2 levels) in with_pty'
[2015-05-27 12:29:38 -0700] [20277] [server] accepted client
[2015-05-27 12:29:38 -0700] [20277] [server] running command rake
[2015-05-27 12:29:38 -0700] [22310] [client] sending command
[2015-05-27 12:32:26 -0700] [20277] [server] shutting down
[2015-05-27 12:32:26 -0700] [20277] [application_manager:development] stopping
/home/fletch/.rvm/gems/ruby-2.1.6/gems/spring-1.3.6/lib/spring/application_manager.rb:22:in `unlock': Attempt to unlock a mutex which is locked by another thread (ThreadError)
    from /home/fletch/.rvm/gems/ruby-2.1.6/gems/spring-1.3.6/lib/spring/application_manager.rb:22:in `ensure in synchronize'
    from /home/fletch/.rvm/gems/ruby-2.1.6/gems/spring-1.3.6/lib/spring/application_manager.rb:22:in `synchronize'
    from /home/fletch/.rvm/gems/ruby-2.1.6/gems/spring-1.3.6/lib/spring/application_manager.rb:39:in `with_child'
    from /home/fletch/.rvm/gems/ruby-2.1.6/gems/spring-1.3.6/lib/spring/application_manager.rb:60:in `run'
    from /home/fletch/.rvm/gems/ruby-2.1.6/gems/spring-1.3.6/lib/spring/server.rb:59:in `serve'
    from /home/fletch/.rvm/gems/ruby-2.1.6/gems/spring-1.3.6/lib/spring/server.rb:44:in `block in start_server'
    from /home/fletch/.rvm/gems/ruby-2.1.6/gems/spring-1.3.6/lib/spring/server.rb:44:in `loop'
    from /home/fletch/.rvm/gems/ruby-2.1.6/gems/spring-1.3.6/lib/spring/server.rb:44:in `start_server'
    from /home/fletch/.rvm/gems/ruby-2.1.6/gems/spring-1.3.6/lib/spring/server.rb:38:in `boot'
    from /home/fletch/.rvm/gems/ruby-2.1.6/gems/spring-1.3.6/lib/spring/server.rb:14:in `boot'
    from -e:1:in `<main>'
[2015-05-27 12:32:26 -0700] [22310] [client] got no pid

@sgonyea
Copy link

sgonyea commented Nov 18, 2015

Even on a brand new Rails project, I still see orphaned Spring 'app' processes hanging around, sipping around 6% CPU. I have to kill -9 them. This is without doing any sort of git branching.

In an older (Rails 3) project, I see the same thing but with git branch I get orphaned 'server' processes too.

(This is on OS X Yosemite)

@grosser
Copy link
Collaborator

grosser commented Nov 18, 2015

Also saw that but was never able to reproduce
On Nov 18, 2015 12:53 PM, "Scott Gonyea" [email protected] wrote:

Even on a brand new Rails project, I still see orphaned Spring 'app'
processes hanging around, sipping around 6% CPU. I have to kill -9 them.
This is without doing any sort of git branching.

In an older (Rails 3) project, I see the same thing but with git branch I
get orphaned 'server' processes too.


Reply to this email directly or view it on GitHub
#396 (comment).

@fl00r
Copy link

fl00r commented Dec 8, 2015

One of two times it hangs on El Capitan

@mockdeep
Copy link
Author

We're still seeing spring hanging a lot both on Linux and Macos.

@aaronchi
Copy link

aaronchi commented Apr 17, 2016

I did a bunch of debugging today on an app where spring was nearly unusable and it turns out that removing the dnsruby gem from the Gemfile solved the problem. Not sure what the cause of the issue is (could be related to the use of timeout) but hope this helps someone.

@inspire22
Copy link

Happening to me on mac as well. I run from guard and sometimes spring will hang - even after restarting guard I won't get any results back until I issue "spring stop". Might be loosely correlated with when I cancel tests that are running using ctrl+C (which I'm not sure how guard passes through to spring). Guard also has a bug where ctrl+c will stop the tests running, but also stop guard from watching any files, but that's not related to you...

@pwim
Copy link

pwim commented May 28, 2016

I can confirm that the dnsruby gem and Spring don't play well together. Removing it also prevents this hanging.

@arjun810
Copy link

@aaronchi we're still seeing a bunch of hangs, but aren't using dnsruby. Would you be able to share how you were debugging this? Thanks!

@ayufan
Copy link
Contributor

ayufan commented Jun 21, 2016

You can try my fix: #484. It should help with hanging rails console :)

jonleighton pushed a commit that referenced this issue Jul 1, 2016
* Configure all threads to not abort on exceptions

This solves long outstanding issue: #396.
This happens, because some applications or gems do overwrite global setting of `Thread.abort_on_exception=` which is by default set to `false`.
This leads to application process to exit and making the spring unable to recover from that.

* Use rescue blocks instead of `abort_on_exception=`

* Rescue PTY

* Use `Spring.failsafe_thread`

* Add CHANGELOG
@markiz
Copy link
Contributor

markiz commented Jul 21, 2016

For us spring freezes during the second preload if an app is whining about already existing constant. I assume this is somehow connected with writing to an STDERR with a stale descriptor, but I'm not sure.

This is on 1.7.2.

@markiz
Copy link
Contributor

markiz commented Jul 21, 2016

Okay, I've played with it a little and here's what I found.
Spring freezes during eager preload. That happens when PTY that we provided gets written more than X bytes without being read from the other end. Normally, we would read that using the other thread that we spawn. However, when ruby issues warnings like "previous definition of XXX was here", it uses blocking writes. Blocking write starts writing and PTY gets clogged. We can't do anything until we read something. But our reader is in the parallel thread. Which we never get to because we're currently trying to write something to stderr.

I don't know enough about why pty was introduced in the first place, however, as a workaround, I'm going to redirect STDERR to /dev/null in situations when we can't see it (e.g. preloading in the background).

Hope that made any sense.

@markiz
Copy link
Contributor

markiz commented Jul 21, 2016

markiz@5f3ab73 (in my https://github.com/markiz/spring fork) this is what fixes freezes for us, sorry that I can't wrap it in a nice PR with tests and stuff for now.

@ledbettj
Copy link

@markiz In my limited testing that also solves a fairly reproducible hang for me as well.

@jmacdonald
Copy link

@markiz that solved it for me as well (Spring would also spike CPU usage to 100%); thanks!

@JoelNichols
Copy link

Can confirm I'm having this issue on Rails 5.2. Getting a bit tiring having to kill the Rails process every so often.

Thought I was going mad until I found this issue.

@jgomo3
Copy link

jgomo3 commented Feb 4, 2020

  1. Still a problem. I have to stop it in order to be able to work with the Rails console.

@stwr667
Copy link

stwr667 commented Feb 4, 2020

Try Zeus instead - https://github.com/burke/zeus
We've been using it for a more than a year in our workplace. It's not perfect, but more stable than Spring at least.

@MichaelSp
Copy link

MichaelSp commented Feb 15, 2020

rails test hangs but

bin/rails test works fine for me 👍

@mvz
Copy link

mvz commented Jun 17, 2020

I had spring hang regularly, sometimes every five minutes. I've manually applied the patch in markiz@5f3ab73 and haven't seen any hangs since. As per #396 (comment) I'm going to submit that patch as a PR. Conveniently, it's also on a branch.

@mvz
Copy link

mvz commented Aug 26, 2020

I'm still seeing this problem with the new spring release 2.1.1.

@growthcode
Copy link

growthcode commented Sep 14, 2020

My issue came from a file located at bin/spring.
Everything worked once it was removed.

I don't know how it got there. I checked my command history and I never ran spring binstub which is how the file can be autogenerated.

@owen-le-goldenowl
Copy link

owen-le-goldenowl commented Jan 15, 2021

Jan 2021, it's seems the issue still exists. When I start rails c, I see a ruby proccess that comsumes 100% cpu. The proccess is not killed even I exit rails c
Screen Shot 2021-01-15 at 10 02 51

[2021-01-15 10:06:32 +0700] [24141] [server] started on /var/folders/nk/bft63hfj68j6c9xhgxz5cqdw0000gn/T/spring-501/0faafd75253802bff51729462f6c05a6
[2021-01-15 10:06:43 +0700] [24141] [server] accepted client
[2021-01-15 10:06:43 +0700] [24141] [server] running command rails_console
[2021-01-15 10:06:43 +0700] [24141] [application_manager:development] child not running; starting
[2021-01-15 10:06:43 +0700] [24402] [application:development] initialized -> running
[2021-01-15 10:06:43 +0700] [24402] [application:development] got client
[2021-01-15 10:06:43 +0700] [24402] [application:development] preloading app
[2021-01-15 10:06:44 +0700] [24402] [watcher:development] watcher: add: ["/Users/owen/GoldenOwl/Client_Ready/clientready/.env"]
[2021-01-15 10:06:44 +0700] [24402] [watcher:development] watcher: add: [["/Users/owen/GoldenOwl/Client_Ready/clientready/config/spring.rb", "/Users/owen/GoldenOwl/Client_Ready/clientready/config/boot.rb", "/Users/owen/GoldenOwl/Client_Ready/clientready/config/initializers/config.rb", "/Users/owen/GoldenOwl/Client_Ready/clientready/config/application.rb", "/Users/owen/GoldenOwl/Client_Ready/clientready/config/environments/development.rb", "/Users/owen/GoldenOwl/Client_Ready/clientready/app/mailers/application_mailer.rb", "/Users/owen/GoldenOwl/Client_Ready/clientready/app/mailers/custom_devise_mailer.rb", "/Users/owen/GoldenOwl/Client_Ready/clientready/app/models/application_record.rb", "/Users/owen/GoldenOwl/Client_Ready/clientready/app/models/concerns/custom_validators.rb", "/Users/owen/GoldenOwl/Client_Ready/clientready/app/models/user.rb", "/Users/owen/GoldenOwl/Client_Ready/clientready/config/environment.rb"]]
[2021-01-15 10:06:44 +0700] [24402] [watcher:development] watcher: add: [#<Pathname:/Users/owen/GoldenOwl/Client_Ready/clientready/Gemfile>, "/Users/owen/GoldenOwl/Client_Ready/clientready/Gemfile.lock"]
[2021-01-15 10:06:44 +0700] [24402] [watcher:development] watcher: add: [#<Rails::Paths::Path:0x00007f8e25f819d8 @paths=["config/initializers"], @current="config/initializers", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 @path=#<Pathname:/Users/owen/GoldenOwl/Client_Ready/clientready>, @root={"app"=>#<Rails::Paths::Path:0x00007f8e25f82018 @paths=["app"], @current="app", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob="{*,*/concerns}", @exclude=["assets", "javascript"], @autoload_once=false, @eager_load=true, @autoload=false, @load_path=false>, "app/assets"=>#<Rails::Paths::Path:0x00007f8e25f81fa0 @paths=["app/assets"], @current="app/assets", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob="*", @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "app/controllers"=>#<Rails::Paths::Path:0x00007f8e25f81f28 @paths=["app/controllers"], @current="app/controllers", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=true, @autoload=false, @load_path=false>, "app/channels"=>#<Rails::Paths::Path:0x00007f8e25f81eb0 @paths=["app/channels"], @current="app/channels", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob="**/*_channel.rb", @exclude=nil, @autoload_once=false, @eager_load=true, @autoload=false, @load_path=false>, "app/helpers"=>#<Rails::Paths::Path:0x00007f8e25f81e38 @paths=["app/helpers"], @current="app/helpers", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=true, @autoload=false, @load_path=false>, "app/models"=>#<Rails::Paths::Path:0x00007f8e25f81dc0 @paths=["app/models"], @current="app/models", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=true, @autoload=false, @load_path=false>, "app/mailers"=>#<Rails::Paths::Path:0x00007f8e25f81d48 @paths=["app/mailers"], @current="app/mailers", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=true, @autoload=false, @load_path=false>, "app/views"=>#<Rails::Paths::Path:0x00007f8e25f81cd0 @paths=["app/views"], @current="app/views", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "lib"=>#<Rails::Paths::Path:0x00007f8e25f81c58 @paths=["lib"], @current="lib", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=true>, "lib/assets"=>#<Rails::Paths::Path:0x00007f8e25f81be0 @paths=["lib/assets"], @current="lib/assets", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob="*", @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "lib/tasks"=>#<Rails::Paths::Path:0x00007f8e25f81b68 @paths=["lib/tasks"], @current="lib/tasks", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob="**/*.rake", @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "config"=>#<Rails::Paths::Path:0x00007f8e25f81af0 @paths=["config"], @current="config", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "config/environments"=>#<Rails::Paths::Path:0x00007f8e25f81a50 @paths=["config/environments"], @current="config/environments", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob="development.rb", @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "config/initializers"=>#<Rails::Paths::Path:0x00007f8e25f819d8 ...>, "config/locales"=>#<Rails::Paths::Path:0x00007f8e25f81960 @paths=["config/locales"], @current="config/locales", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob="*.{rb,yml}", @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "config/routes.rb"=>#<Rails::Paths::Path:0x00007f8e25f818e8 @paths=["config/routes.rb"], @current="config/routes.rb", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "db"=>#<Rails::Paths::Path:0x00007f8e25f81870 @paths=["db"], @current="db", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "db/migrate"=>#<Rails::Paths::Path:0x00007f8e25f817f8 @paths=["db/migrate"], @current="db/migrate", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "db/seeds.rb"=>#<Rails::Paths::Path:0x00007f8e25f81780 @paths=["db/seeds.rb"], @current="db/seeds.rb", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "vendor"=>#<Rails::Paths::Path:0x00007f8e25f81708 @paths=["vendor"], @current="vendor", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=true>, "vendor/assets"=>#<Rails::Paths::Path:0x00007f8e25f81690 @paths=["vendor/assets"], @current="vendor/assets", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob="*", @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "config/database"=>#<Rails::Paths::Path:0x00007f8e25f81618 @paths=["config/database.yml"], @current="config/database", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "config/secrets"=>#<Rails::Paths::Path:0x00007f8e25f815a0 @paths=["config"], @current="config/secrets", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob="secrets.yml{,.enc}", @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "config/environment"=>#<Rails::Paths::Path:0x00007f8e25f81528 @paths=["config/environment.rb"], @current="config/environment", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "lib/templates"=>#<Rails::Paths::Path:0x00007f8e25f814b0 @paths=["lib/templates"], @current="lib/templates", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "log"=>#<Rails::Paths::Path:0x00007f8e25f81410 @paths=["log/development.log"], @current="log", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "public"=>#<Rails::Paths::Path:0x00007f8e25f81398 @paths=["public"], @current="public", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "public/javascripts"=>#<Rails::Paths::Path:0x00007f8e25f81320 @paths=["public/javascripts"], @current="public/javascripts", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "public/stylesheets"=>#<Rails::Paths::Path:0x00007f8e25f812a8 @paths=["public/stylesheets"], @current="public/stylesheets", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "tmp"=>#<Rails::Paths::Path:0x00007f8e25f81230 @paths=["tmp"], @current="tmp", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "config/cable"=>#<Rails::Paths::Path:0x00007f8e243d8dd0 @paths=["config/cable.yml"], @current="config/cable", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "app/decorators"=>#<Rails::Paths::Path:0x00007f8e2161ec00 @paths=["app/decorators"], @current="app/decorators", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=true, @autoload=false, @load_path=false>}>, @glob="**/*.rb", @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>]
[2021-01-15 10:06:44 +0700] [24402] [watcher:development] watcher: add: [#<Rails::Paths::Path:0x00007f8e25f81618 @paths=["config/database.yml"], @current="config/database", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 @path=#<Pathname:/Users/owen/GoldenOwl/Client_Ready/clientready>, @root={"app"=>#<Rails::Paths::Path:0x00007f8e25f82018 @paths=["app"], @current="app", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob="{*,*/concerns}", @exclude=["assets", "javascript"], @autoload_once=false, @eager_load=true, @autoload=false, @load_path=false>, "app/assets"=>#<Rails::Paths::Path:0x00007f8e25f81fa0 @paths=["app/assets"], @current="app/assets", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob="*", @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "app/controllers"=>#<Rails::Paths::Path:0x00007f8e25f81f28 @paths=["app/controllers"], @current="app/controllers", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=true, @autoload=false, @load_path=false>, "app/channels"=>#<Rails::Paths::Path:0x00007f8e25f81eb0 @paths=["app/channels"], @current="app/channels", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob="**/*_channel.rb", @exclude=nil, @autoload_once=false, @eager_load=true, @autoload=false, @load_path=false>, "app/helpers"=>#<Rails::Paths::Path:0x00007f8e25f81e38 @paths=["app/helpers"], @current="app/helpers", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=true, @autoload=false, @load_path=false>, "app/models"=>#<Rails::Paths::Path:0x00007f8e25f81dc0 @paths=["app/models"], @current="app/models", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=true, @autoload=false, @load_path=false>, "app/mailers"=>#<Rails::Paths::Path:0x00007f8e25f81d48 @paths=["app/mailers"], @current="app/mailers", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=true, @autoload=false, @load_path=false>, "app/views"=>#<Rails::Paths::Path:0x00007f8e25f81cd0 @paths=["app/views"], @current="app/views", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "lib"=>#<Rails::Paths::Path:0x00007f8e25f81c58 @paths=["lib"], @current="lib", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=true>, "lib/assets"=>#<Rails::Paths::Path:0x00007f8e25f81be0 @paths=["lib/assets"], @current="lib/assets", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob="*", @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "lib/tasks"=>#<Rails::Paths::Path:0x00007f8e25f81b68 @paths=["lib/tasks"], @current="lib/tasks", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob="**/*.rake", @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "config"=>#<Rails::Paths::Path:0x00007f8e25f81af0 @paths=["config"], @current="config", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "config/environments"=>#<Rails::Paths::Path:0x00007f8e25f81a50 @paths=["config/environments"], @current="config/environments", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob="development.rb", @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "config/initializers"=>#<Rails::Paths::Path:0x00007f8e25f819d8 @paths=["config/initializers"], @current="config/initializers", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob="**/*.rb", @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "config/locales"=>#<Rails::Paths::Path:0x00007f8e25f81960 @paths=["config/locales"], @current="config/locales", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob="*.{rb,yml}", @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "config/routes.rb"=>#<Rails::Paths::Path:0x00007f8e25f818e8 @paths=["config/routes.rb"], @current="config/routes.rb", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "db"=>#<Rails::Paths::Path:0x00007f8e25f81870 @paths=["db"], @current="db", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "db/migrate"=>#<Rails::Paths::Path:0x00007f8e25f817f8 @paths=["db/migrate"], @current="db/migrate", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "db/seeds.rb"=>#<Rails::Paths::Path:0x00007f8e25f81780 @paths=["db/seeds.rb"], @current="db/seeds.rb", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "vendor"=>#<Rails::Paths::Path:0x00007f8e25f81708 @paths=["vendor"], @current="vendor", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=true>, "vendor/assets"=>#<Rails::Paths::Path:0x00007f8e25f81690 @paths=["vendor/assets"], @current="vendor/assets", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob="*", @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "config/database"=>#<Rails::Paths::Path:0x00007f8e25f81618 ...>, "config/secrets"=>#<Rails::Paths::Path:0x00007f8e25f815a0 @paths=["config"], @current="config/secrets", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob="secrets.yml{,.enc}", @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "config/environment"=>#<Rails::Paths::Path:0x00007f8e25f81528 @paths=["config/environment.rb"], @current="config/environment", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "lib/templates"=>#<Rails::Paths::Path:0x00007f8e25f814b0 @paths=["lib/templates"], @current="lib/templates", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "log"=>#<Rails::Paths::Path:0x00007f8e25f81410 @paths=["log/development.log"], @current="log", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "public"=>#<Rails::Paths::Path:0x00007f8e25f81398 @paths=["public"], @current="public", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "public/javascripts"=>#<Rails::Paths::Path:0x00007f8e25f81320 @paths=["public/javascripts"], @current="public/javascripts", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "public/stylesheets"=>#<Rails::Paths::Path:0x00007f8e25f812a8 @paths=["public/stylesheets"], @current="public/stylesheets", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "tmp"=>#<Rails::Paths::Path:0x00007f8e25f81230 @paths=["tmp"], @current="tmp", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "config/cable"=>#<Rails::Paths::Path:0x00007f8e243d8dd0 @paths=["config/cable.yml"], @current="config/cable", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "app/decorators"=>#<Rails::Paths::Path:0x00007f8e2161ec00 @paths=["app/decorators"], @current="app/decorators", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=true, @autoload=false, @load_path=false>}>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>]
[2021-01-15 10:06:44 +0700] [24402] [watcher:development] watcher: add: [#<Rails::Paths::Path:0x00007f8e25f815a0 @paths=["config"], @current="config/secrets", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 @path=#<Pathname:/Users/owen/GoldenOwl/Client_Ready/clientready>, @root={"app"=>#<Rails::Paths::Path:0x00007f8e25f82018 @paths=["app"], @current="app", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob="{*,*/concerns}", @exclude=["assets", "javascript"], @autoload_once=false, @eager_load=true, @autoload=false, @load_path=false>, "app/assets"=>#<Rails::Paths::Path:0x00007f8e25f81fa0 @paths=["app/assets"], @current="app/assets", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob="*", @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "app/controllers"=>#<Rails::Paths::Path:0x00007f8e25f81f28 @paths=["app/controllers"], @current="app/controllers", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=true, @autoload=false, @load_path=false>, "app/channels"=>#<Rails::Paths::Path:0x00007f8e25f81eb0 @paths=["app/channels"], @current="app/channels", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob="**/*_channel.rb", @exclude=nil, @autoload_once=false, @eager_load=true, @autoload=false, @load_path=false>, "app/helpers"=>#<Rails::Paths::Path:0x00007f8e25f81e38 @paths=["app/helpers"], @current="app/helpers", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=true, @autoload=false, @load_path=false>, "app/models"=>#<Rails::Paths::Path:0x00007f8e25f81dc0 @paths=["app/models"], @current="app/models", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=true, @autoload=false, @load_path=false>, "app/mailers"=>#<Rails::Paths::Path:0x00007f8e25f81d48 @paths=["app/mailers"], @current="app/mailers", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=true, @autoload=false, @load_path=false>, "app/views"=>#<Rails::Paths::Path:0x00007f8e25f81cd0 @paths=["app/views"], @current="app/views", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "lib"=>#<Rails::Paths::Path:0x00007f8e25f81c58 @paths=["lib"], @current="lib", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=true>, "lib/assets"=>#<Rails::Paths::Path:0x00007f8e25f81be0 @paths=["lib/assets"], @current="lib/assets", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob="*", @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "lib/tasks"=>#<Rails::Paths::Path:0x00007f8e25f81b68 @paths=["lib/tasks"], @current="lib/tasks", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob="**/*.rake", @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "config"=>#<Rails::Paths::Path:0x00007f8e25f81af0 @paths=["config"], @current="config", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "config/environments"=>#<Rails::Paths::Path:0x00007f8e25f81a50 @paths=["config/environments"], @current="config/environments", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob="development.rb", @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "config/initializers"=>#<Rails::Paths::Path:0x00007f8e25f819d8 @paths=["config/initializers"], @current="config/initializers", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob="**/*.rb", @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "config/locales"=>#<Rails::Paths::Path:0x00007f8e25f81960 @paths=["config/locales"], @current="config/locales", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob="*.{rb,yml}", @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "config/routes.rb"=>#<Rails::Paths::Path:0x00007f8e25f818e8 @paths=["config/routes.rb"], @current="config/routes.rb", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "db"=>#<Rails::Paths::Path:0x00007f8e25f81870 @paths=["db"], @current="db", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "db/migrate"=>#<Rails::Paths::Path:0x00007f8e25f817f8 @paths=["db/migrate"], @current="db/migrate", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "db/seeds.rb"=>#<Rails::Paths::Path:0x00007f8e25f81780 @paths=["db/seeds.rb"], @current="db/seeds.rb", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "vendor"=>#<Rails::Paths::Path:0x00007f8e25f81708 @paths=["vendor"], @current="vendor", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=true>, "vendor/assets"=>#<Rails::Paths::Path:0x00007f8e25f81690 @paths=["vendor/assets"], @current="vendor/assets", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob="*", @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "config/database"=>#<Rails::Paths::Path:0x00007f8e25f81618 @paths=["config/database.yml"], @current="config/database", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "config/secrets"=>#<Rails::Paths::Path:0x00007f8e25f815a0 ...>, "config/environment"=>#<Rails::Paths::Path:0x00007f8e25f81528 @paths=["config/environment.rb"], @current="config/environment", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "lib/templates"=>#<Rails::Paths::Path:0x00007f8e25f814b0 @paths=["lib/templates"], @current="lib/templates", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "log"=>#<Rails::Paths::Path:0x00007f8e25f81410 @paths=["log/development.log"], @current="log", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "public"=>#<Rails::Paths::Path:0x00007f8e25f81398 @paths=["public"], @current="public", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "public/javascripts"=>#<Rails::Paths::Path:0x00007f8e25f81320 @paths=["public/javascripts"], @current="public/javascripts", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "public/stylesheets"=>#<Rails::Paths::Path:0x00007f8e25f812a8 @paths=["public/stylesheets"], @current="public/stylesheets", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "tmp"=>#<Rails::Paths::Path:0x00007f8e25f81230 @paths=["tmp"], @current="tmp", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "config/cable"=>#<Rails::Paths::Path:0x00007f8e243d8dd0 @paths=["config/cable.yml"], @current="config/cable", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>, "app/decorators"=>#<Rails::Paths::Path:0x00007f8e2161ec00 @paths=["app/decorators"], @current="app/decorators", @root=#<Rails::Paths::Root:0x00007f8e25f820e0 ...>, @glob=nil, @exclude=nil, @autoload_once=false, @eager_load=true, @autoload=false, @load_path=false>}>, @glob="secrets.yml{,.enc}", @exclude=nil, @autoload_once=false, @eager_load=false, @autoload=false, @load_path=false>]
[2021-01-15 10:06:44 +0700] [24402] [application:development] forked 24415
[2021-01-15 10:06:44 +0700] [24141] [application_manager:development] got worker pid 24415








[2021-01-15 10:07:08 +0700] [24402] [application:development] 24415 exited with 0
[2021-01-15 10:07:19 +0700] [24141] [server] shutting down
[2021-01-15 10:07:19 +0700] [24141] [application_manager:development] stopping
[2021-01-15 10:07:19 +0700] [24402] [application:development] running -> terminating
[2021-01-15 10:07:19 +0700] [24402] [application:development] terminating -> exiting
[2021-01-15 10:07:19 +0700] [24141] [application_manager:development] child 24402 shutdown

@jaydorsey
Copy link

jaydorsey commented Mar 5, 2021

Not to pile on, but this is definitely reproducible with a minimal rails application.

rails new --skip-webpack-install --api test_spring && cd test_spring   
echo "ENV.fetch('FOOBAR')" > config/initializers/foo.rb  
bin/rails c # This hangs, prevents CTRL-C, CTRL-\, etc. from working
DISABLE_SPRING=1 bin/rails c # this works fine

Tested this with Ruby 3.0.0 but have seen the same behavior for a long time with other ruby versions.

I tried with the #693 fork changes and it didn't seem to fix this particular issue.

I did find something just now that might be interesting/relevant: this error only happens when I'm inside tmux. I wonder how many other people in this thread are using tmux?

I typically have no other problems with tmux and tmux itself isn't hung up; even when it hangs I can create a new buffer & then issue pkill -9 ruby to kill the hanging process

Edit: I've also tried updating the listen gem and have seen mixed results

Edit 2: I've tested a modified version of my commands above inside of tmux; newest stable ruby + rails + manually activate & install spring + manually start spring. The patch noted at the bottom of this thread in #623 appears to fix it. Spring no longer hangs in tmux; it raises the correct/expected "key not found" error message

@mcfoton
Copy link

mcfoton commented Mar 5, 2021

Maybe this will help someone: while in the beginning I thought that spring is the issue, in my specific case ruby process eating 100% CPU was solved by explicitly updating listen gem version used in spring-watcher-listen gem that we had in the project.

@owen-le-goldenowl
Copy link

Maybe this will help someone: while in the beginning I thought that spring is the issue, in my specific case ruby process eating 100% CPU was solved by explicitly updating listen gem version used in spring-watcher-listen gem that we had in the project.

Worked. Thank you 👍

@tbhockey
Copy link

tbhockey commented Aug 4, 2021

Not to pile on, but this is definitely reproducible with a minimal rails application.

rails new --skip-webpack-install --api test_spring && cd test_spring   
echo "ENV.fetch('FOOBAR')" > config/initializers/foo.rb  
bin/rails c # This hangs, prevents CTRL-C, CTRL-\, etc. from working
DISABLE_SPRING=1 bin/rails c # this works fine

Tested this with Ruby 3.0.0 but have seen the same behavior for a long time with other ruby versions.

I tried with the #693 fork changes and it didn't seem to fix this particular issue.

I did find something just now that might be interesting/relevant: this error only happens when I'm inside tmux. I wonder how many other people in this thread are using tmux?

I typically have no other problems with tmux and tmux itself isn't hung up; even when it hangs I can create a new buffer & then issue pkill -9 ruby to kill the hanging process

Edit: I've also tried updating the listen gem and have seen mixed results

Interesting. I too am on tmux and experiencing this after recently bumping to Ruby 2.6.8.

@jaydorsey
Copy link

I tested this fix (saw that github shows "May be fixed by 623")

Inside of tmux I still see the same issue. It still may fix this issue (not sure if my issue is the same as reported by OP)

I tried my snippet posted earlier with the latest versions of things:

  • ruby 3.0.2
  • rails 6.1.4
  • listen 3.6.0
  • spring 2.1.1
  • bootsnap 1.7.7

Not sure which versions I used originally, but since now I'm also seeing it hang outside of tmux as well I wish I'd documented the versions so I could compare.

I'm happy to pair on this if anyone wants to, but I'm not even sure where to start with this. My tmux config is available online (as is most of my setup/shell)

@jgomo3
Copy link

jgomo3 commented Aug 20, 2021

Kind of related, and kind of good news: Spring is not default anymore rails/rails#42997

@SaimonL
Copy link

SaimonL commented Aug 30, 2021

I am having the same issue where Ctrl+c won't work and I have to kill it from task manager by force.

  • macOS Big Sur (11.5.2)
  • Rails 6.1.4.1 AND Rails 5.2.6
  • Ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [x86_64-darwin20] via rbenv
  • brew is up to date
  • Its a new rails app that does not have anything much

The worst part is that it is random so you don't know when it will happen and once it does from that point on its 100% of the time until you do one of the followings below:

  1. If I disable spring then it loads fast and never gets stuck.
  2. If I don't disable spring then I have to enable "eager_load"

@jussijarvio
Copy link

Experienced similar hanging with every "rails"-command on Rails 6.1.5 and after trying all kind of sorcery and witchcraft I ended up regenerating binstubs with "rake app:update:bin". This solved all "rails"-command issues for me.

@fredngo
Copy link

fredngo commented Sep 13, 2022

Wow, 7 years later, finally fixed! 🎉

@jasonfb
Copy link

jasonfb commented May 22, 2023

I noticed recently that sometimes Spring hangs if you try to run a test (Minitest) with the wrong filename, for example, a test file that doesn't exist.

smartech7 pushed a commit to smartech7/ruby-preloader-spring that referenced this issue Aug 4, 2023
* Configure all threads to not abort on exceptions

This solves long outstanding issue: rails/spring#396.
This happens, because some applications or gems do overwrite global setting of `Thread.abort_on_exception=` which is by default set to `false`.
This leads to application process to exit and making the spring unable to recover from that.

* Use rescue blocks instead of `abort_on_exception=`

* Rescue PTY

* Use `Spring.failsafe_thread`

* Add CHANGELOG
smartech7 pushed a commit to smartech7/ruby-preloader-spring that referenced this issue Aug 4, 2023
Sometimes the PTY slave can be closed, causing an unhandled exception in
the thread which is calling `master.read` (socket closed).

This change kills the thread before this happens.

Related to rails/spring#396
 (since this exception was causing Spring to hang)
JulianSage added a commit to JulianSage/spring that referenced this issue Oct 23, 2024
* Configure all threads to not abort on exceptions

This solves long outstanding issue: rails/spring#396.
This happens, because some applications or gems do overwrite global setting of `Thread.abort_on_exception=` which is by default set to `false`.
This leads to application process to exit and making the spring unable to recover from that.

* Use rescue blocks instead of `abort_on_exception=`

* Rescue PTY

* Use `Spring.failsafe_thread`

* Add CHANGELOG
JulianSage added a commit to JulianSage/spring that referenced this issue Oct 23, 2024
Sometimes the PTY slave can be closed, causing an unhandled exception in
the thread which is calling `master.read` (socket closed).

This change kills the thread before this happens.

Related to rails/spring#396
 (since this exception was causing Spring to hang)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet