This library provides a Postgres adapter for Semian by wrapping the pg gem Semian is a resiliency toolkit for Ruby applications that provides a way to protect your application from external failures by limiting the number of resources that can be used at a time. You can read more about Semian here).
Add the gem to your Gemfile
and require it in your application.
gem 'semian-postgres', require: %w(semian semian/pg)
The adapter is configured by a callback function, which would be ideally defined in some sort of initialization file. For Rails applications these would usually live in the config/initializers/
directory.
The following example configures an adapter to open the circuit after three unsuccessful connection attempts and close it after each successful attempt.
Bulkheading is disabled, because this is not supported with servers that have a thread-oriented model, such as Puma
require "semian" require "semian/pg" SEMIAN_PARAMETERS = { circuit_breaker: true, success_threshold: 1, error_threshold: 3, error_timeout: 3, bulkhead: false, } Semian::PG.semian_configuration = proc do |host, port| if host == "localhost" && port == 5432 return SEMIAN_PARAMETERS end end conn = PG.connect(host: "example.com", port: 5432) conn.exec("SELECT 1")
Semian, and by extension semian-postgres, currently depends on Linux for Bulkheading.
The development environment is based on docker-compose
, spinning up containers for Postgres and Toxiproxy. Additionally a dev
container is spun up. The Gemfile
contains ruby-debug-ide
to support remote debugging from the IDE.
A typical development workflow would be to run the tests in the dev
container
docker compose up -d docker compose exec dev bin/setup docker compose exec dev rake rubocop spec
Bug reports and pull requests are welcome on GitHub.
Thanks to everyone that has already contributedThe gem is available as open source under the terms of the MIT License.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4