anycable 0.6.1 → 0.6.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +43 -2
- data/bin/anycable +1 -1
- data/bin/anycabled +30 -0
- data/lib/anycable/cli.rb +1 -1
- data/lib/anycable/config.rb +4 -2
- data/lib/anycable/exceptions_handling.rb +9 -3
- data/lib/anycable/handler/capture_exceptions.rb +4 -4
- data/lib/anycable/server.rb +22 -6
- data/lib/anycable/version.rb +1 -1
- metadata +5 -53
- data/.github/ISSUE_TEMPLATE.md +0 -25
- data/.github/PULL_REQUEST_TEMPLATE.md +0 -31
- data/.gitignore +0 -40
- data/.hound.yml +0 -3
- data/.rubocop.yml +0 -71
- data/.travis.yml +0 -16
- data/Gemfile +0 -8
- data/Makefile +0 -5
- data/PITCHME.md +0 -139
- data/PITCHME.yaml +0 -1
- data/Rakefile +0 -8
- data/anycable.gemspec +0 -35
- data/assets/Memory3.png +0 -0
- data/assets/Memory5.png +0 -0
- data/assets/RTT3.png +0 -0
- data/assets/RTT5.png +0 -0
- data/assets/Scheme1.png +0 -0
- data/assets/Scheme2.png +0 -0
- data/assets/cpu_chart.gif +0 -0
- data/assets/cpu_chart2.gif +0 -0
- data/assets/evlms.png +0 -0
- data/benchmarks/.gitignore +0 -2
- data/benchmarks/2017-02-12.md +0 -308
- data/benchmarks/2018-03-04.md +0 -192
- data/benchmarks/2018-05-27-rpc-bench.md +0 -57
- data/benchmarks/2018-10-27.md +0 -181
- data/benchmarks/HowTo.md +0 -23
- data/benchmarks/ansible.cfg +0 -9
- data/benchmarks/assets/2018-10-27-action-cable-rss.png +0 -0
- data/benchmarks/assets/2018-10-27-action-cable-rtt.png +0 -0
- data/benchmarks/assets/2018-10-27-anycable-rss.png +0 -0
- data/benchmarks/assets/2018-10-27-anycable-rtt.png +0 -0
- data/benchmarks/assets/2018-10-27-async-rss.png +0 -0
- data/benchmarks/assets/2018-10-27-async-rtt.png +0 -0
- data/benchmarks/assets/2018-10-27-falcon-cable-rss.png +0 -0
- data/benchmarks/assets/2018-10-27-falcon-cable-rtt.png +0 -0
- data/benchmarks/assets/2018-10-27-iodine-cable-rss.png +0 -0
- data/benchmarks/assets/2018-10-27-iodine-cable-rtt.png +0 -0
- data/benchmarks/assets/2018-10-27-plezi-rss.png +0 -0
- data/benchmarks/assets/2018-10-27-plezi-rtt.png +0 -0
- data/benchmarks/bench.png +0 -0
- data/benchmarks/benchmark.yml +0 -69
- data/benchmarks/hosts +0 -5
- data/benchmarks/rtt_plot.py +0 -74
- data/benchmarks/rtt_plot_test.py +0 -16
- data/benchmarks/servers.yml +0 -58
- data/circle.yml +0 -8
- data/etc/bug_report_template.rb +0 -76
- data/protos/rpc.proto +0 -55
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9044b4ce81ea84415ac896ea46c96ad55da523edc3251aa07d7e2490c3a4745e
|
4
|
+
data.tar.gz: 1bfe649fe5bfac2276496668f7fa3e588f38a6c1b0e603d16a3b3695f08a8363
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 415117187f998d7704e9a2d1a305b0fb8cc55b2cdaf58a37292043675bc499e32b806cd2a5a574210f54f16ea91fa7f072cc87d37afec860f13c1abbc9978813
|
7
|
+
data.tar.gz: 5ed3809fe24065e2d029e4cfd92f794112ed1b08cf3ed312e56f5a97cd5e23b51be4f9425303e55b18d9cb41d9143ce639ab60556c34511746994ba9c4d78027
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,47 @@
|
|
2
2
|
|
3
3
|
## master
|
4
4
|
|
5
|
+
## 0.6.2 (2019-03-15)
|
6
|
+
|
7
|
+
- Add GRPC service method name and message content to exception notifications ([@sponomarev][])
|
8
|
+
|
9
|
+
`Anycable.capture_exception` allows accessing GRPC service method name and message content
|
10
|
+
on which an exception was captured. It can be used for exceptions grouping in your tracker and
|
11
|
+
providing additional data to investigate a root of a problem.
|
12
|
+
|
13
|
+
Example:
|
14
|
+
|
15
|
+
```ruby
|
16
|
+
AnyCable.capture_exception do |ex, method, message|
|
17
|
+
Honeybadger.notify(ex, component: "any_cable", action: method, params: message)
|
18
|
+
end
|
19
|
+
```
|
20
|
+
|
21
|
+
Usage of a handler proc with just a single argument is preserved for the sake of compatibility.
|
22
|
+
|
23
|
+
- Add deprecation warning to default host usage ([@sponomarev][])
|
24
|
+
|
25
|
+
Exposing AnyCable publicly is considered to be harmful and planned to be changed
|
26
|
+
in future versions.
|
27
|
+
|
28
|
+
- Allow running the server as a detachable daemon ([@sponomarev][])
|
29
|
+
|
30
|
+
Server is fully managed by the binary itself.
|
31
|
+
|
32
|
+
```
|
33
|
+
# Start anycable daemon
|
34
|
+
$ bundle exec anycabled start
|
35
|
+
|
36
|
+
# Pass cli options to anycable through daemon. Separate daemon options and anycable options with `--`
|
37
|
+
$ bundle exec anycabled start -- --rpc-host 127.0.0.1:31337
|
38
|
+
|
39
|
+
# Stop anycable daemon
|
40
|
+
$ bundle exec anycabled stop
|
41
|
+
|
42
|
+
# See more anycable daemon options
|
43
|
+
$ bundle exec anycabled
|
44
|
+
```
|
45
|
+
|
5
46
|
## 0.6.1 (2019-01-05)
|
6
47
|
|
7
48
|
- [Fix #63](https://github.com/anycable/anycable-rails/issues/63) Load `anyway_config` after application boot to make sure that all frameworks dependent functionality is loaded. ([@palkan][])
|
@@ -116,7 +157,7 @@ Minor fixes.
|
|
116
157
|
|
117
158
|
- [#28](https://github.com/anycable/anycable/issues/28) Support arbitrary headers. ([@palkan][])
|
118
159
|
|
119
|
-
Previously we hardcoded only "Cookie" header. Now we add all passed headers by WebSocket server to request env.
|
160
|
+
Previously we hardcoded only "Cookie" header. Now we add all passed headers by WebSocket server to request env.
|
120
161
|
|
121
162
|
- [#27](https://github.com/anycable/anycable/issues/27) Add `error_msg` to RPC responses. ([@palkan][])
|
122
163
|
|
@@ -130,7 +171,7 @@ We provide `error_msg` only when request status is `ERROR`.
|
|
130
171
|
|
131
172
|
- [#25](https://github.com/anycable/anycable/issues/25) Improve logging and exceptions handling. ([@palkan][])
|
132
173
|
|
133
|
-
Default logger logs to STDOUT with `info` level by default but can be configured to log to file with
|
174
|
+
Default logger logs to STDOUT with `info` level by default but can be configured to log to file with
|
134
175
|
any severity.
|
135
176
|
|
136
177
|
GRPC logging is turned off by default (can be turned on through `log_grpc` configuration parameter).
|
data/bin/anycable
CHANGED
data/bin/anycabled
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "anycable/cli"
|
4
|
+
|
5
|
+
begin
|
6
|
+
require "daemons"
|
7
|
+
rescue LoadError
|
8
|
+
raise <<~MSG
|
9
|
+
You need to add gem 'daemons' to your Gemfile if you want to use `anycabled`:
|
10
|
+
|
11
|
+
# Gemfile
|
12
|
+
gem "daemons", "~> 1.3", require: false
|
13
|
+
MSG
|
14
|
+
end
|
15
|
+
|
16
|
+
options = {
|
17
|
+
dir: "tmp/pids",
|
18
|
+
log_output: false
|
19
|
+
}
|
20
|
+
|
21
|
+
# Preserve current directory. We need it inside the server.
|
22
|
+
current_dir = Dir.pwd
|
23
|
+
|
24
|
+
# Clean ARGV from daemon command and args
|
25
|
+
_, _, args = Daemons::Controller.split_argv(ARGV)
|
26
|
+
|
27
|
+
Daemons.run_proc("anycable", options) do
|
28
|
+
Dir.chdir current_dir
|
29
|
+
AnyCable::CLI.new.run(args)
|
30
|
+
end
|
data/lib/anycable/cli.rb
CHANGED
data/lib/anycable/config.rb
CHANGED
@@ -8,10 +8,12 @@ module AnyCable
|
|
8
8
|
class Config < Anyway::Config
|
9
9
|
config_name :anycable
|
10
10
|
|
11
|
+
DefaultHostWrapper = Class.new(String)
|
12
|
+
|
11
13
|
attr_config(
|
12
14
|
### gRPC options
|
13
|
-
rpc_host: "[::]:50051",
|
14
|
-
# For defaults see https://github.com/grpc/grpc/blob/
|
15
|
+
rpc_host: DefaultHostWrapper.new("[::]:50051"),
|
16
|
+
# For defaults see https://github.com/grpc/grpc/blob/51f0d35509bcdaba572d422c4f856208162022de/src/ruby/lib/grpc/generic/rpc_server.rb#L186-L216
|
15
17
|
rpc_pool_size: GRPC::RpcServer::DEFAULT_POOL_SIZE,
|
16
18
|
rpc_max_waiting_requests: GRPC::RpcServer::DEFAULT_MAX_WAITING_REQUESTS,
|
17
19
|
rpc_poll_period: GRPC::RpcServer::DEFAULT_POLL_PERIOD,
|
@@ -4,15 +4,15 @@ module AnyCable
|
|
4
4
|
module ExceptionsHandling # :nodoc:
|
5
5
|
class << self
|
6
6
|
def add_handler(block)
|
7
|
-
handlers << block
|
7
|
+
handlers << procify(block)
|
8
8
|
end
|
9
9
|
|
10
10
|
alias << add_handler
|
11
11
|
|
12
|
-
def notify(exp)
|
12
|
+
def notify(exp, method_name, message)
|
13
13
|
handlers.each do |handler|
|
14
14
|
begin
|
15
|
-
handler.call(exp)
|
15
|
+
handler.call(exp, method_name, message)
|
16
16
|
rescue StandardError => exp
|
17
17
|
AnyCable.logger.error "!!! EXCEPTION HANDLER THREW AN ERROR !!!"
|
18
18
|
AnyCable.logger.error exp
|
@@ -23,6 +23,12 @@ module AnyCable
|
|
23
23
|
|
24
24
|
private
|
25
25
|
|
26
|
+
def procify(block)
|
27
|
+
return block unless block.lambda?
|
28
|
+
|
29
|
+
proc { |*args| block.call(*args.take(block.arity)) }
|
30
|
+
end
|
31
|
+
|
26
32
|
def handlers
|
27
33
|
@handlers ||= []
|
28
34
|
end
|
@@ -18,16 +18,16 @@ module AnyCable
|
|
18
18
|
|
19
19
|
RESPONSE_CLASS.keys.each do |mid|
|
20
20
|
module_eval <<~CODE, __FILE__, __LINE__ + 1
|
21
|
-
def #{mid}(*)
|
22
|
-
capture_exceptions(:#{mid}) { super }
|
21
|
+
def #{mid}(message, *)
|
22
|
+
capture_exceptions(:#{mid}, message) { super }
|
23
23
|
end
|
24
24
|
CODE
|
25
25
|
end
|
26
26
|
|
27
|
-
def capture_exceptions(method_name)
|
27
|
+
def capture_exceptions(method_name, message)
|
28
28
|
yield
|
29
29
|
rescue StandardError => exp
|
30
|
-
AnyCable::ExceptionsHandling.notify(exp)
|
30
|
+
AnyCable::ExceptionsHandling.notify(exp, method_name.to_s, message.to_h)
|
31
31
|
|
32
32
|
RESPONSE_CLASS.fetch(method_name).new(
|
33
33
|
status: AnyCable::Status::ERROR,
|
data/lib/anycable/server.rb
CHANGED
@@ -12,8 +12,8 @@ module AnyCable
|
|
12
12
|
#
|
13
13
|
# Basic example:
|
14
14
|
#
|
15
|
-
# # create new server listening on
|
16
|
-
# server = AnyCable::Server.new(host: "
|
15
|
+
# # create new server listening on the loopback interface with 50051 port
|
16
|
+
# server = AnyCable::Server.new(host: "127.0.0.1:50051")
|
17
17
|
#
|
18
18
|
# # run gRPC server in bakground
|
19
19
|
# server.start
|
@@ -25,7 +25,7 @@ module AnyCable
|
|
25
25
|
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
26
26
|
def start(**options)
|
27
27
|
warn <<~DEPRECATION
|
28
|
-
Using AnyCable::Server.start is deprecated!
|
28
|
+
DEPRECATION WARNING: Using AnyCable::Server.start is deprecated!
|
29
29
|
Please, use anycable CLI instead.
|
30
30
|
|
31
31
|
See https://docs.anycable.io/#upgrade_to_0_6_0
|
@@ -63,11 +63,9 @@ module AnyCable
|
|
63
63
|
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
64
64
|
end
|
65
65
|
|
66
|
-
DEFAULT_HOST = "0.0.0.0:50051"
|
67
|
-
|
68
66
|
attr_reader :grpc_server, :host
|
69
67
|
|
70
|
-
def initialize(host
|
68
|
+
def initialize(host:, logger: AnyCable.logger, **options)
|
71
69
|
@logger = logger
|
72
70
|
@host = host
|
73
71
|
@grpc_server = build_server(options)
|
@@ -80,6 +78,8 @@ module AnyCable
|
|
80
78
|
|
81
79
|
raise "Cannot re-start stopped server" if stopped?
|
82
80
|
|
81
|
+
check_default_host
|
82
|
+
|
83
83
|
logger.info "RPC server is starting..."
|
84
84
|
|
85
85
|
@start_thread = Thread.new { grpc_server.run }
|
@@ -132,5 +132,21 @@ module AnyCable
|
|
132
132
|
)
|
133
133
|
health_checker
|
134
134
|
end
|
135
|
+
|
136
|
+
def check_default_host
|
137
|
+
return unless host.is_a?(Anycable::Config::DefaultHostWrapper)
|
138
|
+
|
139
|
+
warn <<~DEPRECATION
|
140
|
+
DEPRECATION WARNING: You're using default rpc_host configuration which starts AnyCable RPC
|
141
|
+
server on all available interfaces including external IPv4 and IPv6.
|
142
|
+
This is about to be changed to loopback interface only in future versions.
|
143
|
+
|
144
|
+
Please, consider switching to the loopback interface or set "[::]:50051"
|
145
|
+
explicitly in your configuration, if you want to continue with the current
|
146
|
+
behavior and supress this message.
|
147
|
+
|
148
|
+
See https://docs.anycable.io/#/configuration
|
149
|
+
DEPRECATION
|
150
|
+
end
|
135
151
|
end
|
136
152
|
end
|
data/lib/anycable/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: anycable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- palkan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-03-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: anyway_config
|
@@ -155,63 +155,17 @@ email:
|
|
155
155
|
- dementiev.vm@gmail.com
|
156
156
|
executables:
|
157
157
|
- anycable
|
158
|
+
- anycabled
|
158
159
|
extensions: []
|
159
160
|
extra_rdoc_files: []
|
160
161
|
files:
|
161
|
-
- ".github/ISSUE_TEMPLATE.md"
|
162
|
-
- ".github/PULL_REQUEST_TEMPLATE.md"
|
163
|
-
- ".gitignore"
|
164
|
-
- ".hound.yml"
|
165
|
-
- ".rubocop.yml"
|
166
|
-
- ".travis.yml"
|
167
162
|
- CHANGELOG.md
|
168
|
-
- Gemfile
|
169
163
|
- MIT-LICENSE
|
170
|
-
- Makefile
|
171
|
-
- PITCHME.md
|
172
|
-
- PITCHME.yaml
|
173
164
|
- README.md
|
174
|
-
- Rakefile
|
175
|
-
- anycable.gemspec
|
176
|
-
- assets/Memory3.png
|
177
|
-
- assets/Memory5.png
|
178
|
-
- assets/RTT3.png
|
179
|
-
- assets/RTT5.png
|
180
|
-
- assets/Scheme1.png
|
181
|
-
- assets/Scheme2.png
|
182
|
-
- assets/cpu_chart.gif
|
183
|
-
- assets/cpu_chart2.gif
|
184
|
-
- assets/evlms.png
|
185
|
-
- benchmarks/.gitignore
|
186
|
-
- benchmarks/2017-02-12.md
|
187
|
-
- benchmarks/2018-03-04.md
|
188
|
-
- benchmarks/2018-05-27-rpc-bench.md
|
189
|
-
- benchmarks/2018-10-27.md
|
190
|
-
- benchmarks/HowTo.md
|
191
|
-
- benchmarks/ansible.cfg
|
192
|
-
- benchmarks/assets/2018-10-27-action-cable-rss.png
|
193
|
-
- benchmarks/assets/2018-10-27-action-cable-rtt.png
|
194
|
-
- benchmarks/assets/2018-10-27-anycable-rss.png
|
195
|
-
- benchmarks/assets/2018-10-27-anycable-rtt.png
|
196
|
-
- benchmarks/assets/2018-10-27-async-rss.png
|
197
|
-
- benchmarks/assets/2018-10-27-async-rtt.png
|
198
|
-
- benchmarks/assets/2018-10-27-falcon-cable-rss.png
|
199
|
-
- benchmarks/assets/2018-10-27-falcon-cable-rtt.png
|
200
|
-
- benchmarks/assets/2018-10-27-iodine-cable-rss.png
|
201
|
-
- benchmarks/assets/2018-10-27-iodine-cable-rtt.png
|
202
|
-
- benchmarks/assets/2018-10-27-plezi-rss.png
|
203
|
-
- benchmarks/assets/2018-10-27-plezi-rtt.png
|
204
|
-
- benchmarks/bench.png
|
205
|
-
- benchmarks/benchmark.yml
|
206
|
-
- benchmarks/hosts
|
207
|
-
- benchmarks/rtt_plot.py
|
208
|
-
- benchmarks/rtt_plot_test.py
|
209
|
-
- benchmarks/servers.yml
|
210
165
|
- bin/anycable
|
166
|
+
- bin/anycabled
|
211
167
|
- bin/console
|
212
168
|
- bin/setup
|
213
|
-
- circle.yml
|
214
|
-
- etc/bug_report_template.rb
|
215
169
|
- lib/anycable.rb
|
216
170
|
- lib/anycable/broadcast_adapters.rb
|
217
171
|
- lib/anycable/broadcast_adapters/redis.rb
|
@@ -228,7 +182,6 @@ files:
|
|
228
182
|
- lib/anycable/server.rb
|
229
183
|
- lib/anycable/socket.rb
|
230
184
|
- lib/anycable/version.rb
|
231
|
-
- protos/rpc.proto
|
232
185
|
homepage: http://github.com/anycable/anycable
|
233
186
|
licenses:
|
234
187
|
- MIT
|
@@ -248,8 +201,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
248
201
|
- !ruby/object:Gem::Version
|
249
202
|
version: '0'
|
250
203
|
requirements: []
|
251
|
-
|
252
|
-
rubygems_version: 2.7.6
|
204
|
+
rubygems_version: 3.0.2
|
253
205
|
signing_key:
|
254
206
|
specification_version: 4
|
255
207
|
summary: AnyCable is a polyglot replacement for ActionCable-compatible servers
|
data/.github/ISSUE_TEMPLATE.md
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
<!--
|
2
|
-
First of all, thanks for your report/suggestion/whatever!
|
3
|
-
|
4
|
-
This template is for bug reports. If you are reporting a bug, please continue on. If you are here for another reason,
|
5
|
-
feel free to skip the rest of this template.
|
6
|
-
-->
|
7
|
-
|
8
|
-
### Tell us about your environment
|
9
|
-
|
10
|
-
**Ruby version:**
|
11
|
-
|
12
|
-
**`anycable` gem version:**
|
13
|
-
|
14
|
-
**`grpc` gem version:**
|
15
|
-
|
16
|
-
### What did you do?
|
17
|
-
|
18
|
-
### What did you expect to happen?
|
19
|
-
|
20
|
-
### What actually happened?
|
21
|
-
|
22
|
-
<!--
|
23
|
-
Please, provide reproduction script (using this template (https://github.com/anycable/anycable/blob/master/etc/bug_report_template.rb)
|
24
|
-
when submitting bugs if possible.
|
25
|
-
-->
|
@@ -1,31 +0,0 @@
|
|
1
|
-
<!--
|
2
|
-
First of all, thanks for contributing!
|
3
|
-
|
4
|
-
If it's a typo fix or minor documentation update feel free to skip the rest of this template!
|
5
|
-
-->
|
6
|
-
|
7
|
-
<!--
|
8
|
-
If it's a bug fix, then link it to the issue, for example:
|
9
|
-
|
10
|
-
Fixes #xxx
|
11
|
-
-->
|
12
|
-
|
13
|
-
|
14
|
-
<!--
|
15
|
-
Otherwise, describe the changes:
|
16
|
-
|
17
|
-
### What is the purpose of this pull request?
|
18
|
-
|
19
|
-
### What changes did you make? (overview)
|
20
|
-
|
21
|
-
### Is there anything you'd like reviewers to focus on?
|
22
|
-
|
23
|
-
-->
|
24
|
-
|
25
|
-
<!--
|
26
|
-
Please ensure your PR is ready:
|
27
|
-
|
28
|
-
- Include tests for this change
|
29
|
-
- Add Changelog entry
|
30
|
-
- Update documentation for this change (if appropriate)
|
31
|
-
-->
|
data/.gitignore
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
# Numerous always-ignore extensions
|
2
|
-
*.diff
|
3
|
-
*.err
|
4
|
-
*.orig
|
5
|
-
*.log
|
6
|
-
*.rej
|
7
|
-
*.swo
|
8
|
-
*.swp
|
9
|
-
*.vi
|
10
|
-
*~
|
11
|
-
*.sass-cache
|
12
|
-
*.iml
|
13
|
-
.idea/
|
14
|
-
|
15
|
-
# Sublime
|
16
|
-
*.sublime-project
|
17
|
-
*.sublime-workspace
|
18
|
-
|
19
|
-
# OS or Editor folders
|
20
|
-
.DS_Store
|
21
|
-
.cache
|
22
|
-
.project
|
23
|
-
.settings
|
24
|
-
.tmproj
|
25
|
-
Thumbs.db
|
26
|
-
|
27
|
-
.bundle/
|
28
|
-
log/*.log
|
29
|
-
*.gz
|
30
|
-
pkg/
|
31
|
-
spec/dummy/db/*.sqlite3
|
32
|
-
spec/dummy/db/*.sqlite3-journal
|
33
|
-
spec/dummy/tmp/
|
34
|
-
|
35
|
-
Gemfile.lock
|
36
|
-
Gemfile.local
|
37
|
-
.rspec
|
38
|
-
*.gem
|
39
|
-
tmp/
|
40
|
-
coverage/
|