nulogy_message_bus_producer 3.7.0 → 4.0.0.alpha
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 +4 -4
- data/README.md +105 -9
- data/db/migrate/20210330204121_add_event_type_to_subscription_events.rb +9 -0
- data/lib/nulogy_message_bus_producer/subscription_event.rb +3 -0
- data/lib/nulogy_message_bus_producer/subscriptions/postgres_transport.rb +2 -2
- data/lib/nulogy_message_bus_producer/version.rb +1 -1
- data/lib/nulogy_message_bus_producer.rb +17 -1
- data/spec/dummy/bin/setup +9 -8
- data/spec/dummy/bin/yarn +7 -15
- data/spec/dummy/config/application.rb +6 -11
- data/spec/dummy/config/boot.rb +4 -2
- data/spec/dummy/config/cable.yml +2 -2
- data/spec/dummy/config/environments/development.rb +7 -29
- data/spec/dummy/config/environments/production.rb +15 -45
- data/spec/dummy/config/environments/test.rb +7 -24
- data/spec/dummy/config/initializers/backtrace_silencers.rb +3 -4
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +1 -3
- data/spec/dummy/config/locales/en.yml +1 -1
- data/spec/dummy/config.ru +0 -1
- data/spec/dummy/db/schema.rb +4 -1
- data/spec/dummy/log/development.log +2553 -0
- data/spec/dummy/log/test.log +46636 -0
- data/spec/integration/lib/nulogy_message_bus_producer/repopulate_replication_slots_spec.rb +3 -1
- data/spec/integration/lib/nulogy_message_bus_producer_spec.rb +25 -0
- data/spec/spec_helper.rb +0 -1
- data/spec/support/test_graphql_schema.rb +2 -0
- metadata +67 -104
- data/spec/dummy/config/initializers/content_security_policy.rb +0 -30
- data/spec/dummy/config/initializers/new_framework_defaults_6_1.rb +0 -67
- data/spec/dummy/config/initializers/permissions_policy.rb +0 -11
- data/spec/dummy/config/storage.yml +0 -34
- data/spec/support/skip.rb +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ef6259b620567209e608c461298813e61646f25f8c7aa5adc10e4fa967069ed6
|
4
|
+
data.tar.gz: 61a9f10a879d6b2b05d25c1b3ad177f23948dcf79dd9a89766df29cc8f1c3bf9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d2b2a6558e97fe79eae7624d8bdaefc585b1a8747cd506cfde6d7757eea01d8f5b7153877efcdbbd424d5d4776a5c79cdfb3a61fdf3144e385a9c2010b7b88b0
|
7
|
+
data.tar.gz: 96f659ac685cef6807855baa4b3a4e633b0340f176fec2ac37dbf6c2cefbf20ec0f2d29a2b74196518cf6ee571bae5f56ffe08117cf86d72197125588ed14f8c
|
data/README.md
CHANGED
@@ -10,12 +10,37 @@ This engine contains the classes and validations for producing messages to the M
|
|
10
10
|
2. Install the migrations: `rake railties:install:migrations`
|
11
11
|
3. Use the [Nulogy GraphQL API](https://github.com/nulogy/nulogy_graphql_api)'s schema specs to [ensure schema changes are safe](https://github.com/nulogy/nulogy_graphql_api#schema-generation)
|
12
12
|
|
13
|
-
##
|
13
|
+
## Overview
|
14
14
|
|
15
|
-
|
15
|
+
The Producer gem supports two ways of producing messages:
|
16
|
+
|
17
|
+
### Subscription
|
18
|
+
|
19
|
+
A subscription (either self-serve or configured) is triggered via a domain event.
|
20
|
+
The subscription `event_data` (TODO: column should also be renamed) will render the query against a public GraphQL Schema.
|
21
|
+
|
22
|
+
### Publication
|
23
|
+
|
24
|
+
aka the pub half of `pubsub`.
|
25
|
+
|
26
|
+
A client publishes arbitrary `event_data` (serializable to JSON) to a `topic` under a `event_type`.
|
27
|
+
|
28
|
+
### Comparison
|
29
|
+
|
30
|
+
| Attribute | Subscription | Publication |
|
31
|
+
|-----------------------|------------------------------------------------------|--------------------------|
|
32
|
+
| subscription_id | consumer supplied | random |
|
33
|
+
| subscription_group_id | consumer supplied | random |
|
34
|
+
| topic | consumer supplied | explicit (user supplied) |
|
35
|
+
| type | computed (domain event / GraphQL subscription field) | explicit (user supplied) |
|
36
|
+
| message ordering | per `company_uuid` per `subscription_group_id` | per `company_uuid` |
|
37
|
+
|
38
|
+
## Usage
|
16
39
|
|
17
40
|
### Subscriptions
|
18
41
|
|
42
|
+
Subscriptions should inherit from `NulogyMessageBusProducer::BaseSubscription`.
|
43
|
+
|
19
44
|
Subscriptions are created by consumers to subscribe to certain events that the producer exposes.
|
20
45
|
|
21
46
|
When an event is fired/triggered, subscriptions are used to generate events into the
|
@@ -48,6 +73,71 @@ NulogyMessageBusProducer.configure do |c|
|
|
48
73
|
end
|
49
74
|
```
|
50
75
|
|
76
|
+
These subscriptions are stored in the producer and require a deploy to update.
|
77
|
+
|
78
|
+
#### Self-Serve (deprecated)
|
79
|
+
|
80
|
+
You create these subscriptions via the public GraphQL API. e.g.
|
81
|
+
|
82
|
+
```graphql
|
83
|
+
subscription {
|
84
|
+
workOrderUpdated(subscriptionId: "uuid", subscriptionGroupId: "uuid", topicName: "some-topic") {
|
85
|
+
workOrder {
|
86
|
+
id
|
87
|
+
code
|
88
|
+
}
|
89
|
+
}
|
90
|
+
}
|
91
|
+
```
|
92
|
+
|
93
|
+
These subscriptions are written to the `NulogyMessageBusProducer.subscriptions_table_name` table.
|
94
|
+
|
95
|
+
This style of subscriptions may be removed in a future release.
|
96
|
+
|
97
|
+
There is a [guide to migrate from Self-Serve to Configured](docs/self_serve_to_configured_subscriptions.md)
|
98
|
+
|
99
|
+
### Publications
|
100
|
+
|
101
|
+
The Message Bus has a unified `SubscriptionEvent` (TODO: rename) data structure that will create a Kafka message.
|
102
|
+
Thus, the publication-style of producing messages must provide any required fields to produce a valid `SubscriptionEvent`.
|
103
|
+
|
104
|
+
```ruby
|
105
|
+
# publish
|
106
|
+
# NulogyMessageBusProducer.publish(topic:, type:, company_uuid:, data:)
|
107
|
+
|
108
|
+
NulogyMessageBusProducer.publish(
|
109
|
+
topic: "some-target-inbox",
|
110
|
+
type: "some-event-type",
|
111
|
+
company_uuid: company.uuid,
|
112
|
+
data: {message: "some data", value: "3", ...}
|
113
|
+
)
|
114
|
+
```
|
115
|
+
|
116
|
+
Note that we do not support publishing to multiple topics at the moment.
|
117
|
+
|
118
|
+
A producer may want to wrap these methods:
|
119
|
+
|
120
|
+
```ruby
|
121
|
+
class MetricsPublisher
|
122
|
+
def initialize(company, type: "some-kind-of-metric", topic: "metrics-stream")
|
123
|
+
@company_uuid = company.uuid
|
124
|
+
@topic = topic
|
125
|
+
@type = type
|
126
|
+
end
|
127
|
+
|
128
|
+
def publish(data)
|
129
|
+
NulogyMessageBusProducer.publish(
|
130
|
+
topic: @topic,
|
131
|
+
type: @type,
|
132
|
+
company_uuid: @company_uuid,
|
133
|
+
data: {message:"something", value: 3}
|
134
|
+
)
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
MetricsPublisher.new(Current.company).publish(metric_data)
|
139
|
+
```
|
140
|
+
|
51
141
|
#### Self-Serve (soft-deprecated)
|
52
142
|
|
53
143
|
You create these subscriptions via the public GraphQL API. For testing, the [Insomnia](https://insomnia.rest/) client
|
@@ -133,6 +223,11 @@ module ExampleDomainPublicApi
|
|
133
223
|
class Schema < GraphQL::Schema
|
134
224
|
use NulogyMessageBusProducer::Subscriptions::PostgresTransport
|
135
225
|
|
226
|
+
# You must use the Interpreter, as it will be the new default.
|
227
|
+
# See more here: https://graphql-ruby.org/queries/interpreter
|
228
|
+
use GraphQL::Analysis::AST
|
229
|
+
use GraphQL::Execution::Interpreter
|
230
|
+
|
136
231
|
# This prevents subscriptions which contain arguments or expand lists form being registered.
|
137
232
|
# Expanding unbounded lists inside of an event may severely impact the performance of the system.
|
138
233
|
# Arguments are a source of variation that may not be appropriately tested.
|
@@ -258,19 +353,20 @@ rails message_bus_producer:repopulate_replication_slots
|
|
258
353
|
|
259
354
|
## Rake Tasks
|
260
355
|
|
261
|
-
| Rake command
|
262
|
-
|
263
|
-
| (default)
|
264
|
-
| `spec`
|
265
|
-
| `
|
356
|
+
| Rake command | Description |
|
357
|
+
|------------------|------------------|
|
358
|
+
| (default) | RSpec + Standard |
|
359
|
+
| `spec` | RSpec |
|
360
|
+
| `standardrb` | Standard |
|
361
|
+
| `standardrb:fix` | Fix to Standard |
|
266
362
|
|
267
363
|
# Gem Development Setup
|
268
364
|
|
269
365
|
If you are doing work on this gem you will want to:
|
270
366
|
```shell script
|
271
367
|
docker-compose up
|
272
|
-
rake db:setup
|
273
|
-
rake
|
368
|
+
bundle exec rake db:setup
|
369
|
+
bundle exec rake
|
274
370
|
```
|
275
371
|
|
276
372
|
# Gem Releases
|
@@ -1,9 +1,12 @@
|
|
1
1
|
module NulogyMessageBusProducer
|
2
2
|
# A model that contains the event data for a particular subscription
|
3
3
|
# It is simply saved in the database and shipped to Kafka by Debezium
|
4
|
+
# TODO: rename this --- can be from a subscription or publication
|
5
|
+
# Message? -- kinda conflicts with a "kafka message" but that is on the consumer side.
|
4
6
|
class SubscriptionEvent < ApplicationRecord
|
5
7
|
self.table_name = :message_bus_subscription_events
|
6
8
|
|
9
|
+
# TODO: this should be renamed. You can't update an Event.
|
7
10
|
def self.create_or_update(attrs)
|
8
11
|
find_or_initialize_by(id: attrs[:id]).tap do |model|
|
9
12
|
model.update!(attrs)
|
@@ -12,9 +12,9 @@ module NulogyMessageBusProducer
|
|
12
12
|
#
|
13
13
|
# NulogyMessageBusProducer.register_schema("some_schema", "SomeSchema")
|
14
14
|
class PostgresTransport < GraphQL::Subscriptions
|
15
|
-
def initialize(
|
15
|
+
def initialize(options = {})
|
16
16
|
super
|
17
|
-
@schema_key = NulogyMessageBusProducer.resolve_schema_key(schema)
|
17
|
+
@schema_key = NulogyMessageBusProducer.resolve_schema_key(options.fetch(:schema))
|
18
18
|
end
|
19
19
|
|
20
20
|
def each_subscription_id(event)
|
@@ -1,5 +1,4 @@
|
|
1
1
|
require "graphql"
|
2
|
-
require "pp"
|
3
2
|
|
4
3
|
require "nulogy_message_bus_producer/config"
|
5
4
|
require "nulogy_message_bus_producer/configuration/query_parser"
|
@@ -35,6 +34,23 @@ module NulogyMessageBusProducer
|
|
35
34
|
config.context_for_subscription(subscription)
|
36
35
|
end
|
37
36
|
|
37
|
+
def self.register_publication
|
38
|
+
raise "not implemented yet"
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.publish(topic:, type:, company_uuid:, data:)
|
42
|
+
SubscriptionEvent.create_or_update(
|
43
|
+
id: SecureRandom.uuid,
|
44
|
+
subscription_id: SecureRandom.uuid,
|
45
|
+
partition_key: company_uuid,
|
46
|
+
|
47
|
+
company_uuid: company_uuid,
|
48
|
+
event_type: type,
|
49
|
+
event_json: data,
|
50
|
+
topic_name: topic
|
51
|
+
)
|
52
|
+
end
|
53
|
+
|
38
54
|
def self.trigger_event(schema, event_type, root_object)
|
39
55
|
schema_key = NulogyMessageBusProducer.resolve_schema_key(schema)
|
40
56
|
subscriptions = Subscriptions::Finder.new(config).for_schema_event(schema_key, event_type)
|
data/spec/dummy/bin/setup
CHANGED
@@ -1,32 +1,33 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
require "pathname"
|
2
3
|
require "fileutils"
|
4
|
+
include FileUtils # rubocop:disable Style/MixinUsage
|
3
5
|
|
4
6
|
# path to your application root.
|
5
|
-
APP_ROOT = File.expand_path("
|
7
|
+
APP_ROOT = Pathname.new File.expand_path("../../", __FILE__)
|
6
8
|
|
7
9
|
def system!(*args)
|
8
10
|
system(*args) || abort("\n== Command #{args} failed ==")
|
9
11
|
end
|
10
12
|
|
11
|
-
|
12
|
-
# This script is a
|
13
|
-
# This script is idempotent, so that you can run it at any time and get an expectable outcome.
|
13
|
+
chdir APP_ROOT do
|
14
|
+
# This script is a starting point to setup your application.
|
14
15
|
# Add necessary setup steps to this file.
|
15
16
|
|
16
17
|
puts "== Installing dependencies =="
|
17
18
|
system! "gem install bundler --conservative"
|
18
19
|
system("bundle check") || system!("bundle install")
|
19
20
|
|
20
|
-
# Install JavaScript dependencies
|
21
|
-
system
|
21
|
+
# Install JavaScript dependencies if using Yarn
|
22
|
+
# system('bin/yarn')
|
22
23
|
|
23
24
|
# puts "\n== Copying sample files =="
|
24
25
|
# unless File.exist?('config/database.yml')
|
25
|
-
#
|
26
|
+
# cp 'config/database.yml.sample', 'config/database.yml'
|
26
27
|
# end
|
27
28
|
|
28
29
|
puts "\n== Preparing database =="
|
29
|
-
system! "bin/rails db:
|
30
|
+
system! "bin/rails db:setup"
|
30
31
|
|
31
32
|
puts "\n== Removing old logs and tempfiles =="
|
32
33
|
system! "bin/rails log:clear tmp:clear"
|
data/spec/dummy/bin/yarn
CHANGED
@@ -1,17 +1,9 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
Dir.chdir(
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
if yarn
|
11
|
-
exec yarn, *ARGV
|
12
|
-
else
|
13
|
-
warn "Yarn executable was not detected in the system."
|
14
|
-
warn "Download Yarn at https://yarnpkg.com/en/docs/install"
|
15
|
-
exit 1
|
16
|
-
end
|
2
|
+
VENDOR_PATH = File.expand_path("..", __dir__)
|
3
|
+
Dir.chdir(VENDOR_PATH) do
|
4
|
+
exec "yarnpkg #{ARGV.join(" ")}"
|
5
|
+
rescue Errno::ENOENT
|
6
|
+
warn "Yarn executable was not detected in the system."
|
7
|
+
warn "Download Yarn at https://yarnpkg.com/en/docs/install"
|
8
|
+
exit 1
|
17
9
|
end
|
@@ -1,27 +1,22 @@
|
|
1
1
|
require_relative "boot"
|
2
2
|
|
3
3
|
require "rails/all"
|
4
|
-
require "nulogy_message_bus_producer"
|
5
4
|
|
6
|
-
# Require the gems listed in Gemfile, including any gems
|
7
|
-
# you've limited to :test, :development, or :production.
|
8
5
|
Bundler.require(*Rails.groups)
|
6
|
+
require "nulogy_message_bus_producer"
|
9
7
|
|
10
8
|
module Dummy
|
11
9
|
class Application < Rails::Application
|
12
10
|
# Initialize configuration defaults for originally generated Rails version.
|
13
11
|
config.load_defaults 5.1
|
14
12
|
|
15
|
-
#
|
16
|
-
#
|
17
|
-
#
|
18
|
-
|
19
|
-
#
|
20
|
-
# config.time_zone = "Central Time (US & Canada)"
|
21
|
-
# config.eager_load_paths << Rails.root.join("extras")
|
13
|
+
# Settings in config/environments/* take precedence over those specified here.
|
14
|
+
# Application configuration should go into files in config/initializers
|
15
|
+
# -- all .rb files in that directory are automatically loaded.
|
16
|
+
config.assets.initialize_on_precompile = false
|
22
17
|
|
23
18
|
config.autoload_paths += %W[
|
24
|
-
|
19
|
+
#{config.root}/lib
|
25
20
|
]
|
26
21
|
end
|
27
22
|
end
|
data/spec/dummy/config/boot.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
-
|
1
|
+
# Set up gems listed in the Gemfile.
|
2
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../../Gemfile", __dir__)
|
2
3
|
|
3
|
-
require "bundler/setup"
|
4
|
+
require "bundler/setup" if File.exist?(ENV["BUNDLE_GEMFILE"])
|
5
|
+
$LOAD_PATH.unshift File.expand_path("../../../lib", __dir__)
|
data/spec/dummy/config/cable.yml
CHANGED
@@ -1,10 +1,8 @@
|
|
1
|
-
require "active_support/core_ext/integer/time"
|
2
|
-
|
3
1
|
Rails.application.configure do
|
4
2
|
# Settings specified here will take precedence over those in config/application.rb.
|
5
3
|
|
6
|
-
# In the development environment your application's code is reloaded
|
7
|
-
#
|
4
|
+
# In the development environment your application's code is reloaded on
|
5
|
+
# every request. This slows down response time but is perfect for development
|
8
6
|
# since you don't have to restart the web server when you make code changes.
|
9
7
|
config.cache_classes = false
|
10
8
|
|
@@ -15,14 +13,12 @@ Rails.application.configure do
|
|
15
13
|
config.consider_all_requests_local = true
|
16
14
|
|
17
15
|
# Enable/disable caching. By default caching is disabled.
|
18
|
-
|
19
|
-
if Rails.root.join("tmp", "caching-dev.txt").exist?
|
16
|
+
if Rails.root.join("tmp/caching-dev.txt").exist?
|
20
17
|
config.action_controller.perform_caching = true
|
21
|
-
config.action_controller.enable_fragment_cache_logging = true
|
22
18
|
|
23
19
|
config.cache_store = :memory_store
|
24
20
|
config.public_file_server.headers = {
|
25
|
-
"Cache-Control" => "public, max-age=#{2.days.to_i}"
|
21
|
+
"Cache-Control" => "public, max-age=#{2.days.seconds.to_i}"
|
26
22
|
}
|
27
23
|
else
|
28
24
|
config.action_controller.perform_caching = false
|
@@ -30,9 +26,6 @@ Rails.application.configure do
|
|
30
26
|
config.cache_store = :null_store
|
31
27
|
end
|
32
28
|
|
33
|
-
# Store uploaded files on the local file system (see config/storage.yml for options).
|
34
|
-
config.active_storage.service = :local
|
35
|
-
|
36
29
|
# Don't care if the mailer can't send.
|
37
30
|
config.action_mailer.raise_delivery_errors = false
|
38
31
|
|
@@ -41,18 +34,9 @@ Rails.application.configure do
|
|
41
34
|
# Print deprecation notices to the Rails logger.
|
42
35
|
config.active_support.deprecation = :log
|
43
36
|
|
44
|
-
# Raise exceptions for disallowed deprecations.
|
45
|
-
config.active_support.disallowed_deprecation = :raise
|
46
|
-
|
47
|
-
# Tell Active Support which deprecation messages to disallow.
|
48
|
-
config.active_support.disallowed_deprecation_warnings = []
|
49
|
-
|
50
37
|
# Raise an error on page load if there are pending migrations.
|
51
38
|
config.active_record.migration_error = :page_load
|
52
39
|
|
53
|
-
# Highlight code that triggered database queries in logs.
|
54
|
-
config.active_record.verbose_query_logs = true
|
55
|
-
|
56
40
|
# Debug mode disables concatenation and preprocessing of assets.
|
57
41
|
# This option may cause significant delays in view rendering with a large
|
58
42
|
# number of complex assets.
|
@@ -61,16 +45,10 @@ Rails.application.configure do
|
|
61
45
|
# Suppress logger output for asset requests.
|
62
46
|
config.assets.quiet = true
|
63
47
|
|
64
|
-
# Raises error for missing translations
|
65
|
-
# config.
|
66
|
-
|
67
|
-
# Annotate rendered view with file names.
|
68
|
-
# config.action_view.annotate_rendered_view_with_filenames = true
|
48
|
+
# Raises error for missing translations
|
49
|
+
# config.action_view.raise_on_missing_translations = true
|
69
50
|
|
70
51
|
# Use an evented file watcher to asynchronously detect changes in source code,
|
71
52
|
# routes, locales, etc. This feature depends on the listen gem.
|
72
|
-
config.file_watcher = ActiveSupport::EventedFileUpdateChecker
|
73
|
-
|
74
|
-
# Uncomment if you wish to allow Action Cable access from any origin.
|
75
|
-
# config.action_cable.disable_request_forgery_protection = true
|
53
|
+
# config.file_watcher = ActiveSupport::EventedFileUpdateChecker
|
76
54
|
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require "active_support/core_ext/integer/time"
|
2
|
-
|
3
1
|
Rails.application.configure do
|
4
2
|
# Settings specified here will take precedence over those in config/application.rb.
|
5
3
|
|
@@ -16,32 +14,32 @@ Rails.application.configure do
|
|
16
14
|
config.consider_all_requests_local = false
|
17
15
|
config.action_controller.perform_caching = true
|
18
16
|
|
19
|
-
#
|
20
|
-
#
|
21
|
-
# config.
|
17
|
+
# Attempt to read encrypted secrets from `config/secrets.yml.enc`.
|
18
|
+
# Requires an encryption key in `ENV["RAILS_MASTER_KEY"]` or
|
19
|
+
# `config/secrets.yml.key`.
|
22
20
|
config.read_encrypted_secrets = false
|
23
21
|
|
24
22
|
# Disable serving static files from the `/public` folder by default since
|
25
23
|
# Apache or NGINX already handles this.
|
26
24
|
config.public_file_server.enabled = ENV["RAILS_SERVE_STATIC_FILES"].present?
|
27
25
|
|
28
|
-
# Compress
|
26
|
+
# Compress JavaScripts and CSS.
|
27
|
+
config.assets.js_compressor = :uglifier
|
29
28
|
# config.assets.css_compressor = :sass
|
30
29
|
|
31
30
|
# Do not fallback to assets pipeline if a precompiled asset is missed.
|
32
31
|
config.assets.compile = false
|
33
32
|
|
33
|
+
# `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb
|
34
|
+
|
34
35
|
# Enable serving of images, stylesheets, and JavaScripts from an asset server.
|
35
|
-
# config.asset_host = 'http://assets.example.com'
|
36
|
+
# config.action_controller.asset_host = 'http://assets.example.com'
|
36
37
|
|
37
38
|
# Specifies the header that your server uses for sending files.
|
38
39
|
# config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache
|
39
40
|
# config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX
|
40
41
|
|
41
|
-
#
|
42
|
-
config.active_storage.service = :local
|
43
|
-
|
44
|
-
# Mount Action Cable outside main process or domain.
|
42
|
+
# Mount Action Cable outside main process or domain
|
45
43
|
# config.action_cable.mount_path = nil
|
46
44
|
# config.action_cable.url = 'wss://example.com/cable'
|
47
45
|
# config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ]
|
@@ -49,9 +47,9 @@ Rails.application.configure do
|
|
49
47
|
# Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
|
50
48
|
# config.force_ssl = true
|
51
49
|
|
52
|
-
#
|
53
|
-
#
|
54
|
-
config.log_level = :
|
50
|
+
# Use the lowest log level to ensure availability of diagnostic information
|
51
|
+
# when problems arise.
|
52
|
+
config.log_level = :debug
|
55
53
|
|
56
54
|
# Prepend all log lines with the following tags.
|
57
55
|
config.log_tags = [:request_id]
|
@@ -59,10 +57,9 @@ Rails.application.configure do
|
|
59
57
|
# Use a different cache store in production.
|
60
58
|
# config.cache_store = :mem_cache_store
|
61
59
|
|
62
|
-
# Use a real queuing backend for Active Job (and separate queues per environment)
|
60
|
+
# Use a real queuing backend for Active Job (and separate queues per environment)
|
63
61
|
# config.active_job.queue_adapter = :resque
|
64
|
-
# config.active_job.queue_name_prefix = "
|
65
|
-
|
62
|
+
# config.active_job.queue_name_prefix = "dummy_#{Rails.env}"
|
66
63
|
config.action_mailer.perform_caching = false
|
67
64
|
|
68
65
|
# Ignore bad email addresses and do not raise email delivery errors.
|
@@ -76,17 +73,11 @@ Rails.application.configure do
|
|
76
73
|
# Send deprecation notices to registered listeners.
|
77
74
|
config.active_support.deprecation = :notify
|
78
75
|
|
79
|
-
# Log disallowed deprecations.
|
80
|
-
config.active_support.disallowed_deprecation = :log
|
81
|
-
|
82
|
-
# Tell Active Support which deprecation messages to disallow.
|
83
|
-
config.active_support.disallowed_deprecation_warnings = []
|
84
|
-
|
85
76
|
# Use default logging formatter so that PID and timestamp are not suppressed.
|
86
77
|
config.log_formatter = ::Logger::Formatter.new
|
87
78
|
|
88
79
|
# Use a different logger for distributed setups.
|
89
|
-
# require
|
80
|
+
# require 'syslog/logger'
|
90
81
|
# config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name')
|
91
82
|
|
92
83
|
if ENV["RAILS_LOG_TO_STDOUT"].present?
|
@@ -97,25 +88,4 @@ Rails.application.configure do
|
|
97
88
|
|
98
89
|
# Do not dump schema after migrations.
|
99
90
|
config.active_record.dump_schema_after_migration = false
|
100
|
-
|
101
|
-
# Inserts middleware to perform automatic connection switching.
|
102
|
-
# The `database_selector` hash is used to pass options to the DatabaseSelector
|
103
|
-
# middleware. The `delay` is used to determine how long to wait after a write
|
104
|
-
# to send a subsequent read to the primary.
|
105
|
-
#
|
106
|
-
# The `database_resolver` class is used by the middleware to determine which
|
107
|
-
# database is appropriate to use based on the time delay.
|
108
|
-
#
|
109
|
-
# The `database_resolver_context` class is used by the middleware to set
|
110
|
-
# timestamps for the last write to the primary. The resolver uses the context
|
111
|
-
# class timestamps to determine how long to wait before reading from the
|
112
|
-
# replica.
|
113
|
-
#
|
114
|
-
# By default Rails will store a last write timestamp in the session. The
|
115
|
-
# DatabaseSelector middleware is designed as such you can define your own
|
116
|
-
# strategy for connection switching and pass that into the middleware through
|
117
|
-
# these configuration options.
|
118
|
-
# config.active_record.database_selector = { delay: 2.seconds }
|
119
|
-
# config.active_record.database_resolver = ActiveRecord::Middleware::DatabaseSelector::Resolver
|
120
|
-
# config.active_record.database_resolver_context = ActiveRecord::Middleware::DatabaseSelector::Resolver::Session
|
121
91
|
end
|
@@ -1,13 +1,10 @@
|
|
1
|
-
require "active_support/core_ext/integer/time"
|
2
|
-
|
3
|
-
# The test environment is used exclusively to run your application's
|
4
|
-
# test suite. You never need to work with it otherwise. Remember that
|
5
|
-
# your test database is "scratch space" for the test suite and is wiped
|
6
|
-
# and recreated between test runs. Don't rely on the data there!
|
7
|
-
|
8
1
|
Rails.application.configure do
|
9
2
|
# Settings specified here will take precedence over those in config/application.rb.
|
10
3
|
|
4
|
+
# The test environment is used exclusively to run your application's
|
5
|
+
# test suite. You never need to work with it otherwise. Remember that
|
6
|
+
# your test database is "scratch space" for the test suite and is wiped
|
7
|
+
# and recreated between test runs. Don't rely on the data there!
|
11
8
|
config.cache_classes = true
|
12
9
|
|
13
10
|
# Do not eager load code on boot. This avoids loading your whole application
|
@@ -18,23 +15,18 @@ Rails.application.configure do
|
|
18
15
|
# Configure public file server for tests with Cache-Control for performance.
|
19
16
|
config.public_file_server.enabled = true
|
20
17
|
config.public_file_server.headers = {
|
21
|
-
"Cache-Control" => "public, max-age=#{1.hour.to_i}"
|
18
|
+
"Cache-Control" => "public, max-age=#{1.hour.seconds.to_i}"
|
22
19
|
}
|
23
20
|
|
24
21
|
# Show full error reports and disable caching.
|
25
22
|
config.consider_all_requests_local = true
|
26
23
|
config.action_controller.perform_caching = false
|
27
|
-
config.cache_store = :null_store
|
28
24
|
|
29
25
|
# Raise exceptions instead of rendering exception templates.
|
30
26
|
config.action_dispatch.show_exceptions = false
|
31
27
|
|
32
28
|
# Disable request forgery protection in test environment.
|
33
29
|
config.action_controller.allow_forgery_protection = false
|
34
|
-
|
35
|
-
# Store uploaded files on the local file system in a temporary directory.
|
36
|
-
config.active_storage.service = :test
|
37
|
-
|
38
30
|
config.action_mailer.perform_caching = false
|
39
31
|
|
40
32
|
# Tell Action Mailer not to deliver emails to the real world.
|
@@ -45,15 +37,6 @@ Rails.application.configure do
|
|
45
37
|
# Print deprecation notices to the stderr.
|
46
38
|
config.active_support.deprecation = :stderr
|
47
39
|
|
48
|
-
#
|
49
|
-
config.
|
50
|
-
|
51
|
-
# Tell Active Support which deprecation messages to disallow.
|
52
|
-
config.active_support.disallowed_deprecation_warnings = []
|
53
|
-
|
54
|
-
# Raises error for missing translations.
|
55
|
-
# config.i18n.raise_on_missing_translations = true
|
56
|
-
|
57
|
-
# Annotate rendered view with file names.
|
58
|
-
# config.action_view.annotate_rendered_view_with_filenames = true
|
40
|
+
# Raises error for missing translations
|
41
|
+
# config.action_view.raise_on_missing_translations = true
|
59
42
|
end
|
@@ -1,8 +1,7 @@
|
|
1
1
|
# Be sure to restart your server when you modify this file.
|
2
2
|
|
3
3
|
# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
|
4
|
-
# Rails.backtrace_cleaner.add_silencer { |line| /my_noisy_library
|
4
|
+
# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
|
5
5
|
|
6
|
-
# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code
|
7
|
-
#
|
8
|
-
Rails.backtrace_cleaner.remove_silencers! if ENV["BACKTRACE"]
|
6
|
+
# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
|
7
|
+
# Rails.backtrace_cleaner.remove_silencers!
|
@@ -1,6 +1,4 @@
|
|
1
1
|
# Be sure to restart your server when you modify this file.
|
2
2
|
|
3
3
|
# Configure sensitive parameters which will be filtered from the log file.
|
4
|
-
Rails.application.config.filter_parameters += [
|
5
|
-
:password, :passw, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn
|
6
|
-
]
|
4
|
+
Rails.application.config.filter_parameters += [:password]
|
data/spec/dummy/config.ru
CHANGED