web-console 2.3.0 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 [](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
|