When designing modern applications on microservices architecture and systems based on cloud solutions such as AWS, Azure, or Google Cloud imply the need to handle expected failures.
We can represent the simplest retry in runtime as a rescue block and variable with a count of executed retries.
Also Ruby has built-in
retry keyword, an example can be changed in the next way:
StandardError, for e.g.
ApiError = Class.new(StandardError)
rescue StandardError =>…
There are two most popular ways to manage secrets in your application.
In this article, I want to talk about the first approach.
Encrypted secrets were first introduced in Rails 5.1. Rails store secrets in
config/credentials.yml.enc by default. For applications created prior to Rails 5.2, we’ll automatically generate a new
credentials file in
In the early stages of development, it may be useful to identify slow queries in time (when you don’t have a paid APM). QueryTrack helps to get notified about slow queries with related data: duration and backtrace.
Add this line to your application’s
Gemfile and then execute
To start receiving information about requests you need to create
config/initializers/query_track.rb where there is a time limit that is specified in seconds and an output channel (for example console logs):
QueryTrack::Settings.configure do |config|
config.duration = 0.5
config.logs = true
You won't get any notifications without setting the max duration of an SQL query. These settings will show at what point requests are considered to be slow. …
One of the tools that are rarely covered in the Ruby/Rails world are the message brokers (probably because they mostly written in Java). Everyone are familiar mostly with background jobs processing, but message brokers offer a more flexible approach to asynchronous execution. For example, you can create a message from one application and process it in another and continue executing without waiting for the response.
Some benefits that you get at the architectural level:
Fault Tolerance, Guaranteed delivery, Asynchronous communication(through Publish/Subscribe pattern), Loosely coupling, etc.
One of the messaging brokers that I used is ActiveMQ. ActiveMQ provides most of these features and I will consider building communication using this broker as an example. …
To use Redis as a Rails cache store, use a dedicated cache instance that’s set up as an LRU (Last Recently Used) cache instead of pointing the store at your existing Redis server, to make sure entries are dropped from the store when it reaches its maximum size.
To get started, add the redis gem to your…
Sucker Punch — a single-process Ruby asynchronous processing library that runs with your existing app’s process.
Gem is built on top of concurrent-ruby and have no dependencies with any data storage, what is both an advantage and a disadvantage.
Running in the application process really simplifies the deployment process, but If the web processes are restarted with jobs remaining in the queue, they will be lost. …
export statements have been standardized in ES2015. They are not supported in browsers yet, but webpack does support them out of the box. But actually it’s more powerful tool which can help us build whole our front-end.
Let’s start with initializing
package.json by using
npm init command.
Installing globally locks you down to a specific version of webpack and could fail in projects that use a different version. Therefore, we will install it locally.
npm install --save-dev webpack
Webpack will be added to
Because we are installing webpack locally we have to run it through
Linter is a static analysis tool such as RuboCop. It checks the written code and makes suggestions based on pre-defined rules by community-driven coding style guides and common idioms.
Most definitions of linter default behavior can be changed for the needs of your team and project via various configuration options.
There are many reasons to lint the code:
Git hooks are scripts that execute before or after actions such as: commit, push, and receive. …
Developers often save time on automation of the deployment process at the beginning of a project. Therefore, some of developers manually start the deployment. As the project becomes larger and the team grows, more features and fixes are released every day. Deployment takes a huge amount of precious time and distracts developers from working on important tasks like reviewing new versions or showing new features or fixes for clients.
Continuous Delivery is a software development practice that allows for building software in such a way that the new update can be released any time.
The best practice is to automatically run the command for deployment after successful build passing. CircleCI makes it easy to configure your workflow and push the project to the deployment host. With CircleCI, each successful build of your code is automatically delivered to staging, production or any other stage you require to deliver your application. After the successful (or failed) build passing and deployment you receive an email notification. …
Every developer is looking for a right way to deploy applications to production. Often, the question of the deployment is delayed at a later time, and it’s well known that many applications do not launch in production and developers just use solutions like Heroku for staging or demo servers. Cloud platforms are easy to use, but they are expensive and not so configurable, unlike your own VPS.
With Chef you can define the steps required to configure a server to fulfill a “role”, for example a Rails application server or a database server and then apply combinations of these roles to a particular remote machine. …