Add Mongoid, MongoDB ODM for Ruby
This commit is contained in:
parent
b93ee3e0f4
commit
0df07c478a
4 changed files with 336 additions and 0 deletions
3
Gemfile
3
Gemfile
|
|
@ -32,6 +32,9 @@ gem "kamal", require: false
|
||||||
# Add HTTP asset caching/compression and X-Sendfile acceleration to Puma [https://github.com/basecamp/thruster/]
|
# Add HTTP asset caching/compression and X-Sendfile acceleration to Puma [https://github.com/basecamp/thruster/]
|
||||||
gem "thruster", require: false
|
gem "thruster", require: false
|
||||||
|
|
||||||
|
# Mongoid gem to communicate with the MongoDB
|
||||||
|
gem "mongoid"
|
||||||
|
|
||||||
group :development, :test do
|
group :development, :test do
|
||||||
# See https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-gem
|
# See https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-gem
|
||||||
gem "debug", platforms: %i[ mri windows ], require: "debug/prelude"
|
gem "debug", platforms: %i[ mri windows ], require: "debug/prelude"
|
||||||
|
|
|
||||||
|
|
@ -84,6 +84,7 @@ GEM
|
||||||
msgpack (~> 1.2)
|
msgpack (~> 1.2)
|
||||||
brakeman (7.0.2)
|
brakeman (7.0.2)
|
||||||
racc
|
racc
|
||||||
|
bson (5.0.2)
|
||||||
builder (3.3.0)
|
builder (3.3.0)
|
||||||
capybara (3.40.0)
|
capybara (3.40.0)
|
||||||
addressable
|
addressable
|
||||||
|
|
@ -149,6 +150,13 @@ GEM
|
||||||
matrix (0.4.2)
|
matrix (0.4.2)
|
||||||
mini_mime (1.1.5)
|
mini_mime (1.1.5)
|
||||||
minitest (5.25.5)
|
minitest (5.25.5)
|
||||||
|
mongo (2.21.1)
|
||||||
|
base64
|
||||||
|
bson (>= 4.14.1, < 6.0.0)
|
||||||
|
mongoid (9.0.6)
|
||||||
|
activemodel (>= 5.1, < 8.1, != 7.0.0)
|
||||||
|
concurrent-ruby (>= 1.0.5, < 2.0)
|
||||||
|
mongo (>= 2.18.0, < 3.0.0)
|
||||||
msgpack (1.8.0)
|
msgpack (1.8.0)
|
||||||
net-imap (0.5.8)
|
net-imap (0.5.8)
|
||||||
date
|
date
|
||||||
|
|
@ -342,6 +350,7 @@ DEPENDENCIES
|
||||||
importmap-rails
|
importmap-rails
|
||||||
jbuilder
|
jbuilder
|
||||||
kamal
|
kamal
|
||||||
|
mongoid
|
||||||
propshaft
|
propshaft
|
||||||
puma (>= 5.0)
|
puma (>= 5.0)
|
||||||
rails (~> 8.0.2)
|
rails (~> 8.0.2)
|
||||||
|
|
|
||||||
25
config/initializers/mongoid.rb
Normal file
25
config/initializers/mongoid.rb
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
# rubocop:todo all
|
||||||
|
Mongoid.configure do
|
||||||
|
target_version = "9.0"
|
||||||
|
|
||||||
|
# Load Mongoid behavior defaults. This automatically sets
|
||||||
|
# features flags (refer to documentation)
|
||||||
|
config.load_defaults target_version
|
||||||
|
|
||||||
|
# It is recommended to use config/mongoid.yml for most Mongoid-related
|
||||||
|
# configuration, whenever possible, but if you prefer, you can set
|
||||||
|
# configuration values here, instead:
|
||||||
|
#
|
||||||
|
# config.log_level = :debug
|
||||||
|
#
|
||||||
|
# Note that the settings in config/mongoid.yml always take precedence,
|
||||||
|
# whatever else is set here.
|
||||||
|
end
|
||||||
|
|
||||||
|
# Enable Mongo driver query cache for Rack
|
||||||
|
# Rails.application.config.middleware.use(Mongo::QueryCache::Middleware)
|
||||||
|
|
||||||
|
# Enable Mongo driver query cache for ActiveJob
|
||||||
|
# ActiveSupport.on_load(:active_job) do
|
||||||
|
# include Mongo::QueryCache::Middleware::ActiveJob
|
||||||
|
# end
|
||||||
299
config/mongoid.yml
Normal file
299
config/mongoid.yml
Normal file
|
|
@ -0,0 +1,299 @@
|
||||||
|
development:
|
||||||
|
# Configure available database clients. (required)
|
||||||
|
clients:
|
||||||
|
# Defines the default client. (required)
|
||||||
|
default:
|
||||||
|
# Mongoid can connect to a URI accepted by the driver:
|
||||||
|
# uri: mongodb://user:password@mongodb.domain.com:27017/mongo_db_uppgift_development
|
||||||
|
|
||||||
|
# Otherwise define the parameters separately.
|
||||||
|
# This defines the name of the default database that Mongoid can connect to.
|
||||||
|
# (required).
|
||||||
|
database: mongo_db_uppgift_development
|
||||||
|
# Provides the hosts the default client can connect to. Must be an array
|
||||||
|
# of host:port pairs. (required)
|
||||||
|
hosts:
|
||||||
|
- localhost:27017
|
||||||
|
options:
|
||||||
|
# Note that all options listed below are Ruby driver client options (the mongo gem).
|
||||||
|
# Please refer to the driver documentation of the version of the mongo gem you are using
|
||||||
|
# for the most up-to-date list of options.
|
||||||
|
|
||||||
|
# Change the default write concern. (default = { w: 1 })
|
||||||
|
# write:
|
||||||
|
# w: 1
|
||||||
|
|
||||||
|
# Change the default read preference. Valid options for mode are: :secondary,
|
||||||
|
# :secondary_preferred, :primary, :primary_preferred, :nearest
|
||||||
|
# (default: primary)
|
||||||
|
# read:
|
||||||
|
# mode: :secondary_preferred
|
||||||
|
# tag_sets:
|
||||||
|
# - use: web
|
||||||
|
|
||||||
|
# The name of the user for authentication.
|
||||||
|
# user: 'user'
|
||||||
|
|
||||||
|
# The password of the user for authentication.
|
||||||
|
# password: 'password'
|
||||||
|
|
||||||
|
# The user's database roles.
|
||||||
|
# roles:
|
||||||
|
# - 'dbOwner'
|
||||||
|
|
||||||
|
# Change the default authentication mechanism. Valid options include:
|
||||||
|
# :scram, :scram256, :mongodb_cr, :mongodb_x509, :gssapi, :aws, :plain.
|
||||||
|
# MongoDB Server defaults to :scram, which will use "SCRAM-SHA-256" if available,
|
||||||
|
# otherwise fallback to "SCRAM-SHA-1" (:scram256 will always use "SCRAM-SHA-256".)
|
||||||
|
# This setting is handled by the MongoDB Ruby Driver. Please refer to:
|
||||||
|
# https://mongodb.com/docs/ruby-driver/current/reference/authentication/
|
||||||
|
# auth_mech: :scram
|
||||||
|
|
||||||
|
# The database or source to authenticate the user against.
|
||||||
|
# (default: the database specified above or admin)
|
||||||
|
# auth_source: admin
|
||||||
|
|
||||||
|
# Force the driver cluster to behave in a certain manner instead of auto-discovering.
|
||||||
|
# Can be one of: :direct, :replica_set, :sharded. Set to :direct
|
||||||
|
# when connecting to hidden members of a replica set.
|
||||||
|
# connect: :direct
|
||||||
|
|
||||||
|
# Changes the default time in seconds the server monitors refresh their status
|
||||||
|
# via hello commands. (default: 10)
|
||||||
|
# heartbeat_frequency: 10
|
||||||
|
|
||||||
|
# The time in seconds for selecting servers for a near read preference. (default: 0.015)
|
||||||
|
# local_threshold: 0.015
|
||||||
|
|
||||||
|
# The timeout in seconds for selecting a server for an operation. (default: 30)
|
||||||
|
server_selection_timeout: 1
|
||||||
|
|
||||||
|
# The maximum number of connections in the connection pool. (default: 5)
|
||||||
|
# max_pool_size: 5
|
||||||
|
|
||||||
|
# The minimum number of connections in the connection pool. (default: 1)
|
||||||
|
# min_pool_size: 1
|
||||||
|
|
||||||
|
# The time to wait, in seconds, in the connection pool for a connection
|
||||||
|
# to be checked in before timing out. (default: 5)
|
||||||
|
# wait_queue_timeout: 5
|
||||||
|
|
||||||
|
# The time to wait to establish a connection before timing out, in seconds.
|
||||||
|
# (default: 10)
|
||||||
|
# connect_timeout: 10
|
||||||
|
|
||||||
|
# How long to wait for a response for each operation sent to the
|
||||||
|
# server. This timeout should be set to a value larger than the
|
||||||
|
# processing time for the longest operation that will be executed
|
||||||
|
# by the application. Note that this is a client-side timeout;
|
||||||
|
# the server may continue executing an operation after the client
|
||||||
|
# aborts it with the SocketTimeout exception.
|
||||||
|
# (default: nil, meaning no timeout)
|
||||||
|
# socket_timeout: 5
|
||||||
|
|
||||||
|
# The name of the replica set to connect to. Servers provided as seeds that do
|
||||||
|
# not belong to this replica set will be ignored.
|
||||||
|
# replica_set: name
|
||||||
|
|
||||||
|
# Compressors to use for wire protocol compression. (default is to not use compression)
|
||||||
|
# "zstd" requires zstd-ruby gem. "snappy" requires snappy gem.
|
||||||
|
# Refer to: https://www.mongodb.com/docs/ruby-driver/current/reference/create-client/#compression
|
||||||
|
# compressors: ["zstd", "snappy", "zlib"]
|
||||||
|
|
||||||
|
# Whether to connect to the servers via ssl. (default: false)
|
||||||
|
# ssl: true
|
||||||
|
|
||||||
|
# The certificate file used to identify the connection against MongoDB.
|
||||||
|
# ssl_cert: /path/to/my.cert
|
||||||
|
|
||||||
|
# The private keyfile used to identify the connection against MongoDB.
|
||||||
|
# Note that even if the key is stored in the same file as the certificate,
|
||||||
|
# both need to be explicitly specified.
|
||||||
|
# ssl_key: /path/to/my.key
|
||||||
|
|
||||||
|
# A passphrase for the private key.
|
||||||
|
# ssl_key_pass_phrase: password
|
||||||
|
|
||||||
|
# Whether to do peer certification validation. (default: true)
|
||||||
|
# ssl_verify: true
|
||||||
|
|
||||||
|
# The file containing concatenated certificate authority certificates
|
||||||
|
# used to validate certs passed from the other end of the connection.
|
||||||
|
# ssl_ca_cert: /path/to/ca.cert
|
||||||
|
|
||||||
|
# Whether to truncate long log lines. (default: true)
|
||||||
|
# truncate_logs: true
|
||||||
|
|
||||||
|
# Configure Mongoid-specific options. (optional)
|
||||||
|
options:
|
||||||
|
# Allow BSON::Decimal128 to be parsed and returned directly in
|
||||||
|
# field values. When BSON 5 is present and the this option is set to false
|
||||||
|
# (the default), BSON::Decimal128 values in the database will be returned
|
||||||
|
# as BigDecimal.
|
||||||
|
#
|
||||||
|
# @note this option only has effect when BSON 5+ is present. Otherwise,
|
||||||
|
# the setting is ignored.
|
||||||
|
# allow_bson5_decimal128: false
|
||||||
|
|
||||||
|
# When this flag is false, named scopes cannot unset a default scope.
|
||||||
|
# This is the traditional (and default) behavior in Mongoid 9 and earlier.
|
||||||
|
#
|
||||||
|
# Setting this flag to true will allow named scopes to unset the default
|
||||||
|
# scope. This will be the default in Mongoid 10.
|
||||||
|
#
|
||||||
|
# See https://jira.mongodb.org/browse/MONGOID-5785 for more details.
|
||||||
|
# allow_scopes_to_unset_default_scope: false
|
||||||
|
|
||||||
|
# Application name that is printed to the MongoDB logs upon establishing
|
||||||
|
# a connection. Note that the name cannot exceed 128 bytes in length.
|
||||||
|
# It is also used as the database name if the database name is not
|
||||||
|
# explicitly defined.
|
||||||
|
# app_name: nil
|
||||||
|
|
||||||
|
# When this flag is false, callbacks for embedded documents will not be
|
||||||
|
# called. This is the default in 9.0.
|
||||||
|
#
|
||||||
|
# Setting this flag to true restores the pre-9.0 behavior, where callbacks
|
||||||
|
# for embedded documents are called. This may lead to stack overflow errors
|
||||||
|
# if there are more than cicrca 1000 embedded documents in the root
|
||||||
|
# document's dependencies graph.
|
||||||
|
# See https://jira.mongodb.org/browse/MONGOID-5658 for more details.
|
||||||
|
# around_callbacks_for_embeds: false
|
||||||
|
|
||||||
|
# Sets the async_query_executor for the application. By default the thread pool executor
|
||||||
|
# is set to `:immediate. Options are:
|
||||||
|
#
|
||||||
|
# - :immediate - Initializes a single +Concurrent::ImmediateExecutor+
|
||||||
|
# - :global_thread_pool - Initializes a single +Concurrent::ThreadPoolExecutor+
|
||||||
|
# that uses the +async_query_concurrency+ for the +max_threads+ value.
|
||||||
|
# async_query_executor: :immediate
|
||||||
|
|
||||||
|
# Mark belongs_to associations as required by default, so that saving a
|
||||||
|
# model with a missing belongs_to association will trigger a validation
|
||||||
|
# error.
|
||||||
|
# belongs_to_required_by_default: true
|
||||||
|
|
||||||
|
# Set the global discriminator key.
|
||||||
|
# discriminator_key: "_type"
|
||||||
|
|
||||||
|
# Raise an exception when a field is redefined.
|
||||||
|
# duplicate_fields_exception: false
|
||||||
|
|
||||||
|
# Defines how many asynchronous queries can be executed concurrently.
|
||||||
|
# This option should be set only if `async_query_executor` is set
|
||||||
|
# to `:global_thread_pool`.
|
||||||
|
# global_executor_concurrency: nil
|
||||||
|
|
||||||
|
# When this flag is true, any attempt to change the _id of a persisted
|
||||||
|
# document will raise an exception (`Errors::ImmutableAttribute`).
|
||||||
|
# This is the default in 9.0. Setting this flag to false restores the
|
||||||
|
# pre-9.0 behavior, where changing the _id of a persisted
|
||||||
|
# document might be ignored, or it might work, depending on the situation.
|
||||||
|
# immutable_ids: true
|
||||||
|
|
||||||
|
# Include the root model name in json serialization.
|
||||||
|
# include_root_in_json: false
|
||||||
|
|
||||||
|
# # Include the _type field in serialization.
|
||||||
|
# include_type_for_serialization: false
|
||||||
|
|
||||||
|
# Whether to join nested persistence contexts for atomic operations
|
||||||
|
# to parent contexts by default.
|
||||||
|
# join_contexts: false
|
||||||
|
|
||||||
|
# When this flag is false (the default as of Mongoid 9.0), a document that
|
||||||
|
# is created or loaded will remember the storage options that were active
|
||||||
|
# when it was loaded, and will use those same options by default when
|
||||||
|
# saving or reloading itself.
|
||||||
|
#
|
||||||
|
# When this flag is true you'll get pre-9.0 behavior, where a document will
|
||||||
|
# not remember the storage options from when it was loaded/created, and
|
||||||
|
# subsequent updates will need to explicitly set up those options each time.
|
||||||
|
#
|
||||||
|
# For example:
|
||||||
|
#
|
||||||
|
# record = Model.with(collection: 'other_collection') { Model.first }
|
||||||
|
#
|
||||||
|
# This will try to load the first document from 'other_collection' and
|
||||||
|
# instantiate it as a Model instance. Pre-9.0, the record object would
|
||||||
|
# not remember that it came from 'other_collection', and attempts to
|
||||||
|
# update it or reload it would fail unless you first remembered to
|
||||||
|
# explicitly specify the collection every time.
|
||||||
|
#
|
||||||
|
# As of Mongoid 9.0, the record will remember that it came from
|
||||||
|
# 'other_collection', and updates and reloads will automatically default
|
||||||
|
# to that collection, for that record object.
|
||||||
|
# legacy_persistence_context_behavior: false
|
||||||
|
|
||||||
|
# When this flag is false, a document will become read-only only once the
|
||||||
|
# #readonly! method is called, and an error will be raised on attempting
|
||||||
|
# to save or update such documents, instead of just on delete. When this
|
||||||
|
# flag is true, a document is only read-only if it has been projected
|
||||||
|
# using #only or #without, and read-only documents will not be
|
||||||
|
# deletable/destroyable, but they will be savable/updatable.
|
||||||
|
# When this feature flag is turned on, the read-only state will be reset on
|
||||||
|
# reload, but when it is turned off, it won't be.
|
||||||
|
# legacy_readonly: false
|
||||||
|
|
||||||
|
# The log level.
|
||||||
|
#
|
||||||
|
# It must be set prior to referencing clients or Mongo.logger,
|
||||||
|
# changes to this option are not be propagated to any clients and
|
||||||
|
# loggers that already exist.
|
||||||
|
#
|
||||||
|
# Additionally, only when the clients are configured via the
|
||||||
|
# configuration file is the log level given by this option honored.
|
||||||
|
# log_level: :info
|
||||||
|
|
||||||
|
# Store BigDecimals as Decimal128s instead of strings in the db.
|
||||||
|
# map_big_decimal_to_decimal128: true
|
||||||
|
|
||||||
|
# Preload all models in development, needed when models use inheritance.
|
||||||
|
# preload_models: false
|
||||||
|
|
||||||
|
# When this flag is true, callbacks for every embedded document will be
|
||||||
|
# called only once, even if the embedded document is embedded in multiple
|
||||||
|
# documents in the root document's dependencies graph.
|
||||||
|
# This is the default in 9.0. Setting this flag to false restores the
|
||||||
|
# pre-9.0 behavior, where callbacks are called for every occurrence of an
|
||||||
|
# embedded document. The pre-9.0 behavior leads to a problem that for multi
|
||||||
|
# level nested documents callbacks are called multiple times.
|
||||||
|
# See https://jira.mongodb.org/browse/MONGOID-5542
|
||||||
|
# prevent_multiple_calls_of_embedded_callbacks: true
|
||||||
|
|
||||||
|
# Raise an error when performing a #find and the document is not found.
|
||||||
|
# raise_not_found_error: true
|
||||||
|
|
||||||
|
# Raise an error when defining a scope with the same name as an
|
||||||
|
# existing method.
|
||||||
|
# scope_overwrite_exception: false
|
||||||
|
|
||||||
|
# Return stored times as UTC.
|
||||||
|
# use_utc: false
|
||||||
|
|
||||||
|
# Configure Driver-specific options. (optional)
|
||||||
|
driver_options:
|
||||||
|
# When this flag is off, an aggregation done on a view will be executed over
|
||||||
|
# the documents included in that view, instead of all documents in the
|
||||||
|
# collection. When this flag is on, the view fiter is ignored.
|
||||||
|
# broken_view_aggregate: true
|
||||||
|
|
||||||
|
# When this flag is set to false, the view options will be correctly
|
||||||
|
# propagated to readable methods.
|
||||||
|
# broken_view_options: true
|
||||||
|
|
||||||
|
# When this flag is set to true, the update and replace methods will
|
||||||
|
# validate the paramters and raise an error if they are invalid.
|
||||||
|
# validate_update_replace: false
|
||||||
|
|
||||||
|
|
||||||
|
test:
|
||||||
|
clients:
|
||||||
|
default:
|
||||||
|
database: mongo_db_uppgift_test
|
||||||
|
hosts:
|
||||||
|
- localhost:27017
|
||||||
|
options:
|
||||||
|
read:
|
||||||
|
mode: :primary
|
||||||
|
max_pool_size: 1
|
||||||
Loading…
Add table
Add a link
Reference in a new issue