web-console 2.3.0 → 4.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG.markdown +133 -1
- data/MIT-LICENSE +1 -1
- data/README.markdown +48 -86
- data/Rakefile +14 -12
- data/lib/web-console.rb +3 -1
- data/lib/web_console/context.rb +45 -0
- data/lib/web_console/errors.rb +2 -0
- data/lib/web_console/evaluator.rb +14 -5
- data/lib/web_console/exception_mapper.rb +56 -0
- data/lib/web_console/extensions.rb +28 -17
- data/lib/web_console/injector.rb +32 -0
- data/lib/web_console/interceptor.rb +18 -0
- data/lib/web_console/locales/en.yml +1 -1
- data/lib/web_console/middleware.rb +31 -31
- data/lib/web_console/permissions.rb +42 -0
- data/lib/web_console/railtie.rb +38 -24
- data/lib/web_console/request.rb +8 -20
- data/lib/web_console/session.rb +32 -18
- data/lib/web_console/source_location.rb +15 -0
- data/lib/web_console/tasks/extensions.rake +15 -13
- data/lib/web_console/tasks/templates.rake +56 -0
- data/lib/web_console/template.rb +4 -3
- data/lib/web_console/templates/console.js.erb +497 -37
- data/lib/web_console/templates/error_page.js.erb +7 -8
- data/lib/web_console/templates/index.html.erb +4 -0
- data/lib/web_console/templates/layouts/inlined_string.erb +1 -1
- data/lib/web_console/templates/layouts/javascript.erb +1 -1
- data/lib/web_console/templates/regular_page.js.erb +24 -0
- data/lib/web_console/templates/style.css.erb +182 -27
- data/lib/web_console/testing/erb_precompiler.rb +5 -3
- data/lib/web_console/testing/fake_middleware.rb +7 -10
- data/lib/web_console/testing/helper.rb +3 -1
- data/lib/web_console/version.rb +3 -1
- data/lib/web_console/view.rb +24 -3
- data/lib/web_console/whiny_request.rb +8 -6
- data/lib/web_console.rb +28 -20
- metadata +28 -63
- data/lib/web_console/helper.rb +0 -22
- data/lib/web_console/integration/cruby.rb +0 -40
- data/lib/web_console/integration/jruby.rb +0 -111
- data/lib/web_console/integration/rubinius.rb +0 -67
- data/lib/web_console/integration.rb +0 -8
- data/lib/web_console/response.rb +0 -23
- data/lib/web_console/tasks/test_templates.rake +0 -50
- data/lib/web_console/whitelist.rb +0 -42
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: a491428cda19f89cf20ad5ef83558e948feecb7acb7f46b453c5644ad419131b
|
4
|
+
data.tar.gz: 3e3d2902466fc03684b00591b294df2c19af06db31e43f58f1f9e8de14cb731f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d949e602f1056bda92b2e7e13e030a78bd856befeb52ccd89c57c27a5341bab30830e27969f3fd9bf8e3d5e4467de381cb788cd9d5809ad6f5d662b2a00b3993
|
7
|
+
data.tar.gz: a17229c83c77f2fdc2b06ca4d25674391e9318490da932de015d0d8ebc59bf652ccb010577eea9d95c357fcd703ba6b5fb8f2afc8343ad79306e80834f52d77d
|
data/CHANGELOG.markdown
CHANGED
@@ -2,14 +2,127 @@
|
|
2
2
|
|
3
3
|
## master (unreleased)
|
4
4
|
|
5
|
+
## 4.2.0
|
6
|
+
|
7
|
+
* [#308](https://github.com/rails/web-console/pull/308) Fix web-console inline templates rendering ([@voxik])
|
8
|
+
* [#306](https://github.com/rails/web-console/pull/306) Support Ruby 3.0 and above ([@ruanwood])
|
9
|
+
|
10
|
+
## 4.1.0
|
11
|
+
|
12
|
+
* [#304](https://github.com/rails/web-console/pull/304) Add support for Rails 6.1 ([@stephannv])
|
13
|
+
* [#298](https://github.com/rails/web-console/pull/298) Prevent deprecation warnings by removing template formats ([@mikelkew])
|
14
|
+
* [#297](https://github.com/rails/web-console/pull/297) Use MutationObserver instead of Mutation Events ([@mikelkew])
|
15
|
+
* [#296](https://github.com/rails/web-console/pull/296) Add CSP nonce to injected scripts and styles ([@mikelkew])
|
16
|
+
|
17
|
+
## 4.0.4
|
18
|
+
|
19
|
+
* [fb483743](https://github.com/rails/web-console/commit/fb483743a6a2a4168cdc0b2e03f48fc393991b73) Fix a crash on webrick with Rack 2.2.3 ([@gsamokovarov])
|
20
|
+
|
21
|
+
## 4.0.3
|
22
|
+
|
23
|
+
* [#291](https://github.com/rails/web-console/pull/291) Deprecate config.web_console.whitelisted_ips ([@JuanitoFatas])
|
24
|
+
* [#290](https://github.com/rails/web-console/pull/290) Fix Content-Length for rack >= 2.1.0 ([@p8])
|
25
|
+
|
26
|
+
## 4.0.2
|
27
|
+
|
28
|
+
* [#285](https://github.com/rails/web-console/pull/285) Increase timeout on paste ([@celvro])
|
29
|
+
|
30
|
+
## 4.0.1
|
31
|
+
|
32
|
+
* [#279](https://github.com/rails/web-console/pull/279) Fix initial config.web_console.permissions value ([@patorash])
|
33
|
+
|
34
|
+
## 4.0.0
|
35
|
+
|
36
|
+
* [61ce65b5](https://github.com/rails/web-console/commit/61ce65b599f56809de1bd8da6590a80acbd92017) Move to config.web_console.permissions ([@gsamokovarov])
|
37
|
+
* [96127ac1](https://github.com/rails/web-console/commit/96127aac143e1e653fffdc4bb65e1ce0b5ff342d) Introduce Binding#console as an alternative interface ([@gsamokovarov])
|
38
|
+
* [d4591ca5](https://github.com/rails/web-console/commit/d4591ca5396ed15a08818f3da11134852a485b27) Introduce Rails 6 support ([@gsamokovarov])
|
39
|
+
* [f97d8a88](https://github.com/rails/web-console/commit/f97d8a889a38366485e5c5e8985995c19bf61d13) Introduce Ruby 2.6 support ([@gsamokovarov])
|
40
|
+
* [d6deacd9](https://github.com/rails/web-console/commit/d6deacd9d5fcaabf3e3051d6985b53f924f86956) Drop Rails 5 support ([@gsamokovarov])
|
41
|
+
* [90fda878](https://github.com/rails/web-console/commit/90fda8789d402f05647c18f8cdf8e5c3d01692dd) Drop Ruby 2.4 support ([@gsamokovarov])
|
42
|
+
* [#265](https://github.com/rails/web-console/pull/265) Add support for nested exceptions ([@yuki24])
|
43
|
+
|
44
|
+
## 3.7.0
|
45
|
+
|
46
|
+
* [#263](https://github.com/rails/web-console/pull/263) Show binding changes ([@causztic])
|
47
|
+
* [#258](https://github.com/rails/web-console/pull/258) Support Ctrl-A, Ctrl-W and Ctrl-U ([@gsamokovarov])
|
48
|
+
* [#257](https://github.com/rails/web-console/pull/257) Always try to keep the console underneath the website content ([@gsamokovarov])
|
49
|
+
|
50
|
+
## 3.6.2
|
51
|
+
|
52
|
+
* [#255](https://github.com/rails/web-console/pull/255) Fix the truncated HTML body, because of wrong Content-Length header ([@timomeh])
|
53
|
+
|
54
|
+
## 3.6.1
|
55
|
+
|
56
|
+
* [#252](https://github.com/rails/web-console/pull/252) Fix improper injection in Rack bodies like ActionDispatch::Response::RackBody ([@gsamokovarov])
|
57
|
+
|
58
|
+
## 3.6.0
|
59
|
+
|
60
|
+
* [#254](https://github.com/rails/web-console/pull/254) Rescue ActionDispatch::RemoteIp::IpSpoofAttackError ([@wjordan])
|
61
|
+
* [#250](https://github.com/rails/web-console/pull/250) Close original body to comply with Rack SPEC ([@wagenet])
|
62
|
+
* [#249](https://github.com/rails/web-console/pull/249) Update for frozen-string-literal friendliness ([@pat])
|
63
|
+
* [#248](https://github.com/rails/web-console/pull/248) Fix copy on Safari ([@ybart])
|
64
|
+
* [#246](https://github.com/rails/web-console/pull/246) International keyboard special character input fixes ([@fl0l0u])
|
65
|
+
* [#244](https://github.com/rails/web-console/pull/244) Let WebConsole.logger respect Rails.logger ([@gsamokovarov])
|
66
|
+
|
67
|
+
## 3.5.1
|
68
|
+
|
69
|
+
* [#239](https://github.com/rails/web-console/pull/239) Fix the ActionDispatch::DebugExceptions integration ([@gsamokovarov])
|
70
|
+
|
71
|
+
## 3.5.0
|
72
|
+
|
73
|
+
* [#237](https://github.com/rails/web-console/pull/237) Bindex integration for JRuby 9k support ([@gsamokovarov])
|
74
|
+
* [#236](https://github.com/rails/web-console/pull/236) Remove unused Active Support lazy load hook ([@betesh])
|
75
|
+
* [#230](https://github.com/rails/web-console/pull/230) Handle invalid remote addresses ([@akirakoyasu])
|
76
|
+
|
77
|
+
## 3.4.0
|
78
|
+
|
79
|
+
* [#205](https://github.com/rails/web-console/pull/205) Introduce autocompletion ([@sh19910711])
|
80
|
+
|
81
|
+
## 3.3.1
|
82
|
+
|
83
|
+
Drop support for Rails `4.2.0`.
|
84
|
+
|
85
|
+
## 3.3.0
|
86
|
+
|
87
|
+
* [#203](https://github.com/rails/web-console/pull/203) Map bindings to traces based on the trace __FILE__ and __LINE__ ([@gsamokovarov])
|
88
|
+
|
89
|
+
## 3.2.1
|
90
|
+
|
91
|
+
* [#202](https://github.com/rails/web-console/pull/202) Use first binding when there is no application binding ([@sh19910711])
|
92
|
+
|
93
|
+
## 3.2.0
|
94
|
+
|
95
|
+
* [#198](https://github.com/rails/web-console/pull/198) Pick the first application trace binding on errors ([@sh19910711])
|
96
|
+
* [#189](https://github.com/rails/web-console/pull/189) Silence ActionView rendering information ([@gsamokovarov])
|
97
|
+
|
98
|
+
## 3.1.1
|
99
|
+
|
100
|
+
* [#185](https://github.com/rails/web-console/pull/185) Fix `rails console` startup ([@gsamokovarov])
|
101
|
+
|
102
|
+
## 3.1.0
|
103
|
+
|
104
|
+
* [#182](https://github.com/rails/web-console/pull/182) Let `#console` live in `Kernel` ([@schneems])
|
105
|
+
* [#181](https://github.com/rails/web-console/pull/181) Log internal Web Console errors ([@gsamokovarov])
|
106
|
+
* [#180](https://github.com/rails/web-console/pull/180) Autoload Web Console constants for faster Rails boot time ([@herminiotorres])
|
107
|
+
|
108
|
+
## 3.0.0
|
109
|
+
|
110
|
+
* [#173](https://github.com/rails/web-console/pull/173) Revert "Change config.development_only default until 4.2.4 is released" ([@gsamokovarov])
|
111
|
+
* [#171](https://github.com/rails/web-console/pull/171) Fixed blocked IP logging ([@gsamokovarov])
|
112
|
+
* [#162](https://github.com/rails/web-console/pull/162) Render the console inside the body tag ([@gsamokovarov])
|
113
|
+
* [#165](https://github.com/rails/web-console/pull/165) Revamped integrations for CRuby and Rubinius ([@gsamokovarov])
|
114
|
+
|
5
115
|
## 2.3.0
|
6
116
|
|
117
|
+
This is mainly a Rails 5 compatibility release. If you have the chance, please
|
118
|
+
go to 3.1.0 instead.
|
119
|
+
|
7
120
|
* [#181](https://github.com/rails/web-console/pull/181) Log internal Web Console errors ([@schneems])
|
8
121
|
* [#150](https://github.com/rails/web-console/pull/150) Revert #150. ([@gsamokovarov])
|
9
122
|
|
10
123
|
## 2.2.1
|
11
124
|
|
12
|
-
* [#150](https://github.com/rails/web-console/pull/150) Change config.development_only default until 4.2.4 is released
|
125
|
+
* [#150](https://github.com/rails/web-console/pull/150) Change config.development_only default until 4.2.4 is released ([@gsamokovarov])
|
13
126
|
|
14
127
|
## 2.2.0
|
15
128
|
|
@@ -44,6 +157,8 @@
|
|
44
157
|
* [#84](https://github.com/rails/web-console/pull/84) Allow Rails 5 as dependency in gemspec ([@jonatack])
|
45
158
|
* [#69](https://github.com/rails/web-console/pull/69) Introduce middleware for request dispatch and console rendering ([@gsamokovarov])
|
46
159
|
|
160
|
+
[@stephannv]: https://github.com/stephannv
|
161
|
+
[@mikelkew]: https://github.com/mikelkew
|
47
162
|
[@jonatack]: https://github.com/jonatack
|
48
163
|
[@ryandao]: https://github.com/ryandao
|
49
164
|
[@jeffnv]: https://github.com/jeffnv
|
@@ -53,4 +168,21 @@
|
|
53
168
|
[@parterburn]: https://github.com/parterburn
|
54
169
|
[@sh19910711]: https://github.com/sh19910711
|
55
170
|
[@frenesim]: https://github.com/frenesim
|
171
|
+
[@herminiotorres]: https://github.com/herminiotorres
|
56
172
|
[@schneems]: https://github.com/schneems
|
173
|
+
[@betesh]: https://github.com/betesh
|
174
|
+
[@akirakoyasu]: https://github.com/akirakoyasu
|
175
|
+
[@wagenet]: https://github.com/wagenet
|
176
|
+
[@wjordan]: https://github.com/wjordan
|
177
|
+
[@pat]: https://github.com/pat
|
178
|
+
[@ybart]: https://github.com/ybart
|
179
|
+
[@fl0l0u]: https://github.com/fl0l0u
|
180
|
+
[@timomeh]: https://github.com/timomeh
|
181
|
+
[@causztic]: https://github.com/causztic
|
182
|
+
[@yuki24]: https://github.com/yuki24
|
183
|
+
[@patorash]: https://github.com/patorash
|
184
|
+
[@celvro]: https://github.com/celvro
|
185
|
+
[@JuanitoFatas]: https://github.com/JuanitoFatas
|
186
|
+
[@p8]: https://github.com/p8
|
187
|
+
[@voxik]: https://github.com/voxik
|
188
|
+
[@ryanwood]: https://github.com/ryanwood
|
data/MIT-LICENSE
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Copyright 2014
|
1
|
+
Copyright 2014-2016 Hailey Somerville, Genadi Samokovarov, Guillermo Iguaran and Ryan Dao
|
2
2
|
|
3
3
|
Permission is hereby granted, free of charge, to any person obtaining
|
4
4
|
a copy of this software and associated documentation files (the
|
data/README.markdown
CHANGED
@@ -1,10 +1,8 @@
|
|
1
1
|
<p align=right>
|
2
|
-
Documentation for:
|
3
|
-
<a href=https://github.com/rails/web-console/tree/
|
4
|
-
<a href=https://github.com/rails/web-console/tree/v2.1
|
5
|
-
<a href=https://github.com/rails/web-console/tree/
|
6
|
-
<a href=https://github.com/rails/web-console/tree/v2.1.2>v2.1.2</a>
|
7
|
-
<a href=https://github.com/rails/web-console/tree/v2.1.3>v2.1.3</a>
|
2
|
+
<strong>Current version: 4.1.0</strong> | Documentation for:
|
3
|
+
<a href=https://github.com/rails/web-console/tree/v1.0.4>v1.0.4</a>
|
4
|
+
<a href=https://github.com/rails/web-console/tree/v2.2.1>v2.2.1</a>
|
5
|
+
<a href=https://github.com/rails/web-console/tree/v3.7.0>v3.7.0</a>
|
8
6
|
</p>
|
9
7
|
|
10
8
|
# Web Console [![Build Status](https://travis-ci.org/rails/web-console.svg?branch=master)](https://travis-ci.org/rails/web-console)
|
@@ -12,10 +10,6 @@
|
|
12
10
|
_Web Console_ is a debugging tool for your Ruby on Rails applications.
|
13
11
|
|
14
12
|
- [Installation](#installation)
|
15
|
-
- [Runtime](#runtime)
|
16
|
-
- [CRuby](#cruby)
|
17
|
-
- [JRuby](#jruby)
|
18
|
-
- [Rubinius](#rubinius)
|
19
13
|
- [Configuration](#configuration)
|
20
14
|
- [Usage](#usage)
|
21
15
|
- [FAQ](#faq)
|
@@ -23,59 +17,19 @@ _Web Console_ is a debugging tool for your Ruby on Rails applications.
|
|
23
17
|
|
24
18
|
## Installation
|
25
19
|
|
26
|
-
|
27
|
-
application, add the following to your `Gemfile`.
|
20
|
+
Add the following to your `Gemfile`:
|
28
21
|
|
29
22
|
```ruby
|
30
23
|
group :development do
|
31
|
-
gem 'web-console'
|
24
|
+
gem 'web-console'
|
32
25
|
end
|
33
26
|
```
|
34
27
|
|
35
|
-
After you save the `Gemfile` changes, make sure to run `bundle install` and
|
36
|
-
restart your server for the _Web Console_ to kick in.
|
37
|
-
|
38
|
-
## Runtime
|
39
|
-
|
40
|
-
_Web Console_ uses [John Mair]'s [binding_of_caller] to spawn a console in a
|
41
|
-
specific binding. This comes at the price of limited Ruby runtime support.
|
42
|
-
|
43
|
-
### CRuby
|
44
|
-
|
45
|
-
CRuby 1.9.2 and below is **not** supported.
|
46
|
-
|
47
|
-
### JRuby
|
48
|
-
|
49
|
-
JRuby needs to run in interpreted mode. You can enable it by:
|
50
|
-
|
51
|
-
```bash
|
52
|
-
export JRUBY_OPTS=-J-Djruby.compile.mode=OFF
|
53
|
-
|
54
|
-
# If you run JRuby 1.7.12 and above, you can use:
|
55
|
-
export JRUBY_OPTS=--dev
|
56
|
-
```
|
57
|
-
|
58
|
-
An unstable version of [binding_of_caller] is needed as the latest stable one
|
59
|
-
won't compile on _JRuby_. To install it, put the following in your application
|
60
|
-
`Gemfile`:
|
61
|
-
|
62
|
-
```ruby
|
63
|
-
group :development do
|
64
|
-
gem 'binding_of_caller', '0.7.3.pre1'
|
65
|
-
end
|
66
|
-
```
|
67
|
-
|
68
|
-
Only _JRuby_ 1.7, is supported (no JRuby 9K support at the moment).
|
69
|
-
|
70
|
-
### Rubinius
|
71
|
-
|
72
|
-
Internal errors like `ZeroDevisionError` aren't caught.
|
73
|
-
|
74
28
|
## Usage
|
75
29
|
|
76
30
|
The web console allows you to create an interactive Ruby session in your
|
77
|
-
browser. Those sessions are launched automatically in case
|
78
|
-
|
31
|
+
browser. Those sessions are launched automatically in case of an error and can
|
32
|
+
also be launched manually in any page.
|
79
33
|
|
80
34
|
For example, calling `console` in a view will display a console in the current
|
81
35
|
page in the context of the view binding.
|
@@ -96,35 +50,37 @@ class PostsController < ApplicationController
|
|
96
50
|
end
|
97
51
|
```
|
98
52
|
|
99
|
-
|
100
|
-
|
53
|
+
The method is defined in `Kernel` and you can invoke it any application code.
|
54
|
+
|
55
|
+
Only one `console` invocation per request is allowed. If you happen to
|
56
|
+
have multiple ones, `WebConsole::DoubleRenderError` will be raised.
|
101
57
|
|
102
58
|
## Configuration
|
103
59
|
|
104
|
-
_Web Console_ allows you to execute arbitrary code on the server,
|
105
|
-
|
60
|
+
_Web Console_ allows you to execute arbitrary code on the server. Therefore, be
|
61
|
+
very careful who you give access to.
|
106
62
|
|
107
|
-
### config.web_console.
|
63
|
+
### config.web_console.permissions
|
108
64
|
|
109
65
|
By default, only requests coming from IPv4 and IPv6 localhosts are allowed.
|
110
66
|
|
111
|
-
`config.web_console.
|
67
|
+
`config.web_console.permissions` lets you control which IP's have access to
|
112
68
|
the console.
|
113
69
|
|
114
|
-
You can
|
115
|
-
console with `192.168.0.100
|
70
|
+
You can allow single IP's or whole networks. Say you want to share your
|
71
|
+
console with `192.168.0.100`:
|
116
72
|
|
117
73
|
```ruby
|
118
74
|
class Application < Rails::Application
|
119
|
-
config.web_console.
|
75
|
+
config.web_console.permissions = '192.168.0.100'
|
120
76
|
end
|
121
77
|
```
|
122
78
|
|
123
|
-
If you want to
|
79
|
+
If you want to allow the whole private network:
|
124
80
|
|
125
81
|
```ruby
|
126
82
|
Rails.application.configure do
|
127
|
-
config.web_console.
|
83
|
+
config.web_console.permissions = '192.168.0.0/16'
|
128
84
|
end
|
129
85
|
```
|
130
86
|
|
@@ -133,13 +89,13 @@ case in 2.0.
|
|
133
89
|
|
134
90
|
### config.web_console.whiny_requests
|
135
91
|
|
136
|
-
When a console cannot be shown for a given IP address or content type,
|
137
|
-
messages
|
92
|
+
When a console cannot be shown for a given IP address or content type,
|
93
|
+
messages such as the following is printed in the server logs:
|
138
94
|
|
139
95
|
> Cannot render console from 192.168.1.133! Allowed networks:
|
140
96
|
> 127.0.0.0/127.255.255.255, ::1
|
141
97
|
|
142
|
-
If you don't
|
98
|
+
If you don't want to see this message anymore, set this option to `false`:
|
143
99
|
|
144
100
|
```ruby
|
145
101
|
Rails.application.configure do
|
@@ -149,7 +105,7 @@ end
|
|
149
105
|
|
150
106
|
### config.web_console.template_paths
|
151
107
|
|
152
|
-
If you
|
108
|
+
If you want to style the console yourself, then you can place `style.css` at a
|
153
109
|
directory pointed by `config.web_console.template_paths`:
|
154
110
|
|
155
111
|
```ruby
|
@@ -158,14 +114,14 @@ Rails.application.configure do
|
|
158
114
|
end
|
159
115
|
```
|
160
116
|
|
161
|
-
You may
|
117
|
+
You may want to check the [templates] folder at the source tree for the files you
|
162
118
|
may override.
|
163
119
|
|
164
120
|
### config.web_console.mount_point
|
165
121
|
|
166
122
|
Usually the middleware of _Web Console_ is mounted at `/__web_console`.
|
167
|
-
If
|
168
|
-
|
123
|
+
If there is a need to change the path, then you can specify it by
|
124
|
+
`config.web_console.mount_point`:
|
169
125
|
|
170
126
|
```ruby
|
171
127
|
Rails.application.configure do
|
@@ -177,27 +133,31 @@ end
|
|
177
133
|
|
178
134
|
### Where did /console go?
|
179
135
|
|
180
|
-
The remote terminal emulator was extracted in its own gem
|
136
|
+
The remote terminal emulator was extracted in its own gem which is no longer
|
181
137
|
bundled with _Web Console_.
|
182
138
|
|
183
139
|
If you miss this feature, check out [rvt].
|
184
140
|
|
185
|
-
### Why I constantly get unavailable session errors?
|
141
|
+
### Why do I constantly get unavailable session errors?
|
186
142
|
|
187
143
|
All of _Web Console_ sessions are stored in memory. If you happen to run on a
|
188
|
-
multi-process server (like Unicorn) you may
|
144
|
+
multi-process server (like Unicorn), you may encounter unavailable session errors
|
189
145
|
while the server is still running. This is because a request may hit a
|
190
146
|
different worker (process) that doesn't have the desired session in memory.
|
191
|
-
|
192
147
|
To avoid that, if you use such servers in development, configure them so they
|
193
|
-
|
148
|
+
serve requests only out of one process.
|
149
|
+
|
150
|
+
#### Passenger
|
151
|
+
|
152
|
+
Enable sticky sessions for [Passenger on Nginx] or [Passenger on Apache] to
|
153
|
+
prevent unavailable session errors.
|
194
154
|
|
195
155
|
### How to inspect local and instance variables?
|
196
156
|
|
197
157
|
The interactive console executes Ruby code. Invoking `instance_variables` and
|
198
158
|
`local_variables` will give you what you want.
|
199
159
|
|
200
|
-
### Why does console only appear on error pages but not when I call it?
|
160
|
+
### Why does the console only appear on error pages but not when I call it?
|
201
161
|
|
202
162
|
This can be happening if you are using `Rack::Deflater`. Be sure that
|
203
163
|
`WebConsole::Middleware` is used after `Rack::Deflater`. The easiest way to do
|
@@ -209,23 +169,25 @@ Rails.application.configure do
|
|
209
169
|
end
|
210
170
|
```
|
211
171
|
|
212
|
-
### Why I
|
172
|
+
### Why am I getting an undefined method `web_console`?
|
213
173
|
|
214
|
-
Make sure
|
174
|
+
Make sure your configuration lives in `config/environments/development.rb`.
|
215
175
|
|
216
176
|
## Credits
|
217
177
|
|
218
|
-
* Shoutout to [
|
219
|
-
* Kudos to [John Mair] for [binding_of_caller].
|
178
|
+
* Shoutout to [Hailey Somerville] for [better_errors].
|
179
|
+
* Kudos to [John Mair] for [binding_of_caller] and [debug_inspector].
|
220
180
|
* Thanks to [Charles Oliver Nutter] for all the _JRuby_ feedback.
|
221
|
-
* Hugs and kisses to all of our [contributors]
|
181
|
+
* Hugs and kisses to all of our [contributors]!
|
222
182
|
|
223
|
-
[better_errors]: https://github.com/
|
183
|
+
[better_errors]: https://github.com/BetterErrors/better_errors
|
184
|
+
[debug_inspector]: https://github.com/banister/debug_inspector
|
224
185
|
[binding_of_caller]: https://github.com/banister/binding_of_caller
|
225
|
-
[
|
186
|
+
[Hailey Somerville]: https://github.com/haileys
|
226
187
|
[John Mair]: https://github.com/banister
|
227
188
|
[Charles Oliver Nutter]: https://github.com/headius
|
228
189
|
[templates]: https://github.com/rails/web-console/tree/master/lib/web_console/templates
|
229
|
-
[this]: https://github.com/rails/web-console/blob/master/lib/web_console/integration/cruby.rb#L20-L32
|
230
190
|
[rvt]: https://github.com/gsamokovarov/rvt
|
231
191
|
[contributors]: https://github.com/rails/web-console/graphs/contributors
|
192
|
+
[Passenger on Nginx]: https://www.phusionpassenger.com/library/config/nginx/reference/#passengerstickysessions
|
193
|
+
[Passenger on Apache]: https://www.phusionpassenger.com/library/config/apache/reference/#passengerstickysessions
|
data/Rakefile
CHANGED
@@ -1,26 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
begin
|
2
|
-
require
|
4
|
+
require "bundler/setup"
|
3
5
|
rescue LoadError
|
4
|
-
puts
|
6
|
+
puts "You must `gem install bundler` and `bundle install` to run rake tasks"
|
5
7
|
end
|
6
8
|
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
11
|
-
require
|
12
|
-
require
|
9
|
+
require "socket"
|
10
|
+
require "rake/testtask"
|
11
|
+
require "tmpdir"
|
12
|
+
require "securerandom"
|
13
|
+
require "json"
|
14
|
+
require "web_console/testing/erb_precompiler"
|
13
15
|
|
14
16
|
EXPANDED_CWD = File.expand_path(File.dirname(__FILE__))
|
15
17
|
|
16
18
|
Rake::TestTask.new(:test) do |t|
|
17
|
-
t.libs <<
|
18
|
-
t.libs <<
|
19
|
-
t.pattern =
|
19
|
+
t.libs << "lib"
|
20
|
+
t.libs << "test"
|
21
|
+
t.pattern = "test/**/*_test.rb"
|
20
22
|
t.verbose = false
|
21
23
|
end
|
22
24
|
|
23
|
-
Dir[
|
25
|
+
Dir["lib/web_console/tasks/**/*.rake"].each { |task| load task }
|
24
26
|
|
25
27
|
Bundler::GemHelper.install_tasks
|
26
28
|
|
data/lib/web-console.rb
CHANGED
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module WebConsole
|
4
|
+
# A context lets you get object names related to the current session binding.
|
5
|
+
class Context
|
6
|
+
def initialize(binding)
|
7
|
+
@binding = binding
|
8
|
+
end
|
9
|
+
|
10
|
+
# Extracts entire objects which can be called by the current session unless
|
11
|
+
# the inputs is present.
|
12
|
+
#
|
13
|
+
# Otherwise, it extracts methods and constants of the object specified by
|
14
|
+
# the input.
|
15
|
+
def extract(input = nil)
|
16
|
+
input.present? ? local(input) : global
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
GLOBAL_OBJECTS = [
|
22
|
+
"instance_variables",
|
23
|
+
"local_variables",
|
24
|
+
"methods",
|
25
|
+
"class_variables",
|
26
|
+
"Object.constants",
|
27
|
+
"global_variables"
|
28
|
+
]
|
29
|
+
|
30
|
+
def global
|
31
|
+
GLOBAL_OBJECTS.map { |cmd| eval(cmd) }
|
32
|
+
end
|
33
|
+
|
34
|
+
def local(input)
|
35
|
+
[
|
36
|
+
eval("#{input}.methods").map { |m| "#{input}.#{m}" },
|
37
|
+
eval("#{input}.constants").map { |c| "#{input}::#{c}" },
|
38
|
+
]
|
39
|
+
end
|
40
|
+
|
41
|
+
def eval(cmd)
|
42
|
+
@binding.eval(cmd) rescue []
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/lib/web_console/errors.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module WebConsole
|
2
4
|
# Simple Ruby code evaluator.
|
3
5
|
#
|
@@ -6,16 +8,23 @@ module WebConsole
|
|
6
8
|
# return a string and will format exception output.
|
7
9
|
class Evaluator
|
8
10
|
# Cleanses exceptions raised inside #eval.
|
9
|
-
cattr_reader :cleaner
|
10
|
-
|
11
|
-
|
11
|
+
cattr_reader :cleaner, default: begin
|
12
|
+
cleaner = ActiveSupport::BacktraceCleaner.new
|
13
|
+
cleaner.add_silencer { |line| line.start_with?(File.expand_path("..", __FILE__)) }
|
14
|
+
cleaner
|
15
|
+
end
|
12
16
|
|
13
17
|
def initialize(binding = TOPLEVEL_BINDING)
|
14
18
|
@binding = binding
|
15
19
|
end
|
16
20
|
|
17
21
|
def eval(input)
|
18
|
-
|
22
|
+
# Binding#source_location is available since Ruby 2.6.
|
23
|
+
if @binding.respond_to? :source_location
|
24
|
+
"=> #{@binding.eval(input, *@binding.source_location).inspect}\n"
|
25
|
+
else
|
26
|
+
"=> #{@binding.eval(input).inspect}\n"
|
27
|
+
end
|
19
28
|
rescue Exception => exc
|
20
29
|
format_exception(exc)
|
21
30
|
end
|
@@ -25,7 +34,7 @@ module WebConsole
|
|
25
34
|
def format_exception(exc)
|
26
35
|
backtrace = cleaner.clean(Array(exc.backtrace) - caller)
|
27
36
|
|
28
|
-
format = "#{exc.class.name}: #{exc}\n"
|
37
|
+
format = "#{exc.class.name}: #{exc}\n".dup
|
29
38
|
format << backtrace.map { |trace| "\tfrom #{trace}\n" }.join
|
30
39
|
format
|
31
40
|
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module WebConsole
|
4
|
+
class ExceptionMapper
|
5
|
+
attr_reader :exc
|
6
|
+
|
7
|
+
def self.follow(exc)
|
8
|
+
mappers = [new(exc)]
|
9
|
+
|
10
|
+
while cause = (cause || exc).cause
|
11
|
+
mappers << new(cause)
|
12
|
+
end
|
13
|
+
|
14
|
+
mappers
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.find_binding(mappers, exception_object_id)
|
18
|
+
mappers.detect do |exception_mapper|
|
19
|
+
exception_mapper.exc.object_id == exception_object_id.to_i
|
20
|
+
end || mappers.first
|
21
|
+
end
|
22
|
+
|
23
|
+
def initialize(exception)
|
24
|
+
@backtrace = exception.backtrace
|
25
|
+
@bindings = exception.bindings
|
26
|
+
@exc = exception
|
27
|
+
end
|
28
|
+
|
29
|
+
def first
|
30
|
+
guess_the_first_application_binding || @bindings.first
|
31
|
+
end
|
32
|
+
|
33
|
+
def [](index)
|
34
|
+
guess_binding_for_index(index) || @bindings[index]
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def guess_binding_for_index(index)
|
40
|
+
file, line = @backtrace[index].to_s.split(":")
|
41
|
+
line = line.to_i
|
42
|
+
|
43
|
+
@bindings.find do |binding|
|
44
|
+
source_location = SourceLocation.new(binding)
|
45
|
+
source_location.path == file && source_location.lineno == line
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def guess_the_first_application_binding
|
50
|
+
@bindings.find do |binding|
|
51
|
+
source_location = SourceLocation.new(binding)
|
52
|
+
source_location.path.to_s.start_with?(Rails.root.to_s)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|