How to Deploy a Python Flask app with Heroku

Let's build a simple Flask app that is primed and ready to deploy to Heroku. | Continue reading


@blog.appsignal.com | 5 months ago

Advanced Multi-tenancy for Elixir Applications Using Ecto

Welcome to part two of this series. In the previous tutorial, we learned about multi-tenancy, including different multi-tenancy implementation strategies. We also started building a multi-tenant Phoenix link shortening app and added basic user authentication. In this final part o … | Continue reading


@blog.appsignal.com | 5 months ago

Monitor Solid Cache in Rails with AppSignal

AppSignal now supports Solid Cache, giving you the same deep cache performance insights you'd get from other Rails cache stores. In this blog post, we'll give you a quick tour of Solid Cache, and how you can benefit from monitoring your app's cache with AppSignal. Wha … | Continue reading


@blog.appsignal.com | 5 months ago

An Introduction to Profiling in Node.js

Let's discover how to identify and fix the root causes of your Node.js performance issues. | Continue reading


@blog.appsignal.com | 5 months ago

Keep Your Ruby Code Maintainable with Money-Rails

We will cover some best practices and common ways of handling money in your Rails app with Money-Rails. | Continue reading


@blog.appsignal.com | 5 months ago

Shaping the Future of Ruby and Kafka Together with rdkafka-ruby

Hello there! My name is Maciej Mensfeld, and some of you might recognize me from my involvement in RubyGems Security, OSS commitments, or perhaps from Karafka: a multi-threaded, efficient Kafka processing framework tailored for Ruby and Rails. While I generally pen my thoughts on … | Continue reading


@blog.appsignal.com | 5 months ago

Setting Up a Multi-tenant Phoenix App for Elixir

Apps built with Elixir can support massive scalability, real-time interactivity, great fault tolerance, and the language's syntax is actually a joy to use. Elixir is a natural fit for applications such as chat apps, data dashboard apps, and anything needed to support a large … | Continue reading


@blog.appsignal.com | 5 months ago

How We Handle Upgrades at AppSignal

At AppSignal, our pricing revolves around the number of requests we process for a customer and the number of buckets of logging data we store. After their free trial, customers are offered the most fitting plan for them based on their usage in the previous 30 days. About nine yea … | Continue reading


@blog.appsignal.com | 6 months ago

Handle Incoming Webhooks with LiteJob for Ruby on Rails

In parts one and two of this series, we only dealt with the pure CRUD aspects of using SQLite as a production database. In this post, we will explore the world of queue mechanisms, using SQLite as the pub/sub adapter for ActiveJob. Let's make use of LiteJob to handle incoming … | Continue reading


@blog.appsignal.com | 6 months ago

How to Use Timeouts in Node.js

Because of the asynchronous nature of Node.js, it's crucial you set timeouts to ensure the responsiveness of your application. Node.js timeouts help prevent indefinite waiting and let your backend handle situations where tasks take longer than expected. Thanks to timeouts, yo … | Continue reading


@blog.appsignal.com | 6 months ago

Validating Data in Elixir: Using Ecto and NimbleOptions

In the previous part of this series about validating data at the boundary of an Elixir application, we covered a few general programming tactics to try and reject invalid and unexpected data in our software. Continuing with that subject, we'll now explore how two libraries, n … | Continue reading


@blog.appsignal.com | 6 months ago

We've Levelled up Our Top Monitoring Features

We've improved our core features to help you debug issues more efficiently and effectively. This article will walk you through the changes we've made to our Error Tracking, Performance Monitoring, Anomaly Detection, and Log Incidents features that enable you to gain the i … | Continue reading


@blog.appsignal.com | 6 months ago

What Do Deno and Bun Bring to the Table?

Deno and Bun are two JavaScript runtime newcomers that aim to undermine Node.js. These alternatives have gained popularity for their innovative approach to server-side development with JavaScript. But the real question is: what do they bring to the table compared to Node.js? In t … | Continue reading


@blog.appsignal.com | 6 months ago

A Deep Dive Into LiteDB for Ruby on Rails

In the second post of our series covering LiteStack (an alternative way to build Rails applications entirely based on SQLite), we'll explore the database's concepts of flexible typing and type affinity. We'll not only discover how SQLite's data handling differs fr … | Continue reading


@blog.appsignal.com | 6 months ago

AppSignal Monitoring Available for Python Applications

We're happy to announce that AppSignal now offers monitoring tools for Python projects. AppSignal helps you get the most out of your Python application's monitoring metrics, with additional support for multiple Python frameworks and packages such as Django and Celery. In … | Continue reading


@blog.appsignal.com | 6 months ago

Sponsoring Rails World: What Did It Cost, and Was It Worth It?

Many individuals, particularly founders of other SaaS platforms built on Rails, have inquired about the cost of our Rails World 2023 sponsorship and its worth. While anyone can estimate our expenses based on publicly available data, we're happy to provide a detailed breakdown … | Continue reading


@blog.appsignal.com | 6 months ago

What's New in Node.js 21

Node.js v21, the latest Node update, is now available as a stable release. It supersedes v20 in the 'Current' release line, which has been promoted to the long-term support (LTS) channel as of 24 October. This new version stabilizes the fetch and WebStreams API, adds a bu … | Continue reading


@blog.appsignal.com | 6 months ago

How To Use Zig for Elixir NIFs

Elixir excels at building scalable and maintainable applications. However, sometimes Elixir is not the best language to tackle specific tasks, and it can fall short in some areas, like direct system interaction. Fortunately, Elixir offers NIFs (Native Implemented Functions): a pa … | Continue reading


@blog.appsignal.com | 6 months ago

AWS Step Functions with Node.js: Build an API

In the first part of this series, we built the asynchronous components of a much larger solution. Today, we will build the API interface that can be consumed in real-time. Recap So far, we have set up two step functions to process resumes asynchronously. The first step function t … | Continue reading


@blog.appsignal.com | 6 months ago

Monitor Your Node.js and Remix Application with AppSignal

AppSignal now supports Remix! With insights into the performance of Remix components like loaders and routing, AppSignal helps you refine your Remix application. This blog post will show you how to start monitoring your Remix application using AppSignal. Getting Started To get st … | Continue reading


@blog.appsignal.com | 7 months ago

Expressive Ruby and Rails: Communicate Effectively With Your Code

Ruby is an expressive language. This is no accident; Matz very consciously designed Ruby as an intuitive language to more or less read like English. It's safe to say that he succeeded. Methods are named very carefully, and do what they say they do; they also tend to have inve … | Continue reading


@blog.appsignal.com | 7 months ago

Validate Data in a Phoenix Application for Elixir

In this first part of a two-part series, we'll explore how to avoid bad data and validate data at the boundary of a Phoenix application. We'll use a few techniques to ensure that bad data doesn't degrade our application. In part two, we'll specifically focus on le … | Continue reading


@blog.appsignal.com | 7 months ago

Using Action Policy for a Ruby on Rails App: The Basics

To keep your app secure, you need to control who and what can access it. Access control can be categorized into authentication — "who" to allow — and authorization — "what" they can access. Authentication is a subject for another day, but when it comes to user authorization, you … | Continue reading


@blog.appsignal.com | 7 months ago

How To Reduce Reductions in Elixir

In this article, we'll show how you can use Elixir's profile.eprof mix task to evaluate and improve code performance in your Elixir application. You'll see how we used the profiling mix task to lower reductions in our instrument/3 function and custom instrumentation f … | Continue reading


@blog.appsignal.com | 7 months ago

An Introduction to LiteStack for Ruby on Rails

In this series of posts, we will look at LiteStack, a one-stop-shop solution that hosts and processes all your production data on a single machine. LiteStack (as the name suggests) makes use of SQLite to provide: a database using the LiteDB adapter an ActiveJob backend (LiteJob) … | Continue reading


@blog.appsignal.com | 7 months ago

An Introduction to Exceptions in Elixir

Exceptions are a core aspect of programming, and a way to signal when something goes wrong with a program. An exception could result from a simple error, or your program might crash because of underlying constraints. Exceptions are not necessarily bad, though — they are fundament … | Continue reading


@blog.appsignal.com | 7 months ago

An Introduction to Sidekiq for Ruby on Rails

Sidekiq allows Ruby developers to maintain fast and responsive web applications by moving time-consuming tasks into the background. With multithreading at its core, Sidekiq can process many jobs at once. This makes Sidekiq an important part of Ruby or Rails applications that hand … | Continue reading


@blog.appsignal.com | 7 months ago

Phoenix 1.7 for Elixir: Edit a Form in a Modal

In part one of this series, we introduced the CoreComponents that get generated when bootstrapping a new Phoenix project. In part two, we implemented a create modal. Now, we will implement an edit modal. You can continue following along with our companion repo. Editing a Form in … | Continue reading


@blog.appsignal.com | 8 months ago

Job Schedulers for Node: Bull or Agenda?

Whether you're familiar with job schedulers or new to the concept, two popular libraries in the Node.js ecosystem stand out: Bull and Agenda. These libraries provide unique features and advantages when it comes to efficient job scheduling. Let's explore the ins and outs o … | Continue reading


@blog.appsignal.com | 8 months ago

Tracking Errors in a Node.js Application

Production bugs slow down velocity and often affect the complete trajectory of your release roadmap. It helps if you have a robust error tracking setup to rely on. In this article, we'll look at how to make tracking errors in your Node.js application more convenient, automate … | Continue reading


@blog.appsignal.com | 8 months ago

Writing a Custom Credo Check in Elixir

Static code analysis is an important tool to ensure a project meets the right code standards and quality. In Elixir, the most popular package for this is Credo. Not only does it offer dozens of pre-made checks, but it also allows you to create your own. In this article, we will w … | Continue reading


@blog.appsignal.com | 8 months ago

Secure Your Ruby App with JSON Web Tokens

If a web application involves users, as a matter of course, their data should be protected and secured. Securing a web application can mean several things. In this post, we'll discuss a subset of web security that involves authentication using JSON Web Tokens (JWTs) and the R … | Continue reading


@blog.appsignal.com | 8 months ago

Pitfalls to Avoid in Playwright for Node.js

Automation testing has become a fundamental part of web development, and Playwright has emerged as one of the most powerful end-to-end testing tools. Thanks to its robust API and multi-browser support, it's easy to test sites and web apps. At the same time, Playwright can pre … | Continue reading


@blog.appsignal.com | 9 months ago

How to Use MongoDB and Mongoose with Node.js

Mongoose is Object Data Modeling (ODM) for MongoDB. It represents application data as JavaScript objects, mapped to the underlying MongoDB database. You can use Mongoose to model data, enforce schemas, validate models, and manipulate data in a database without familiarity with th … | Continue reading


@blog.appsignal.com | 9 months ago

A Deep Dive into Subscriptions with Absinthe

In this series, we've seen how to create GraphQL APIs in Elixir using Absinthe. So far, we have only discussed a one-way communication channel where the client makes the queries or mutations, and the server responds. GraphQL also supports a long-running subscription between t … | Continue reading


@blog.appsignal.com | 9 months ago

Advanced Usages of Devise for Rails

In part one of this series, we introduced Devise using an example app to explore modules, helpers, views, controllers, and routes. In this part, we'll explore more advanced usages of Devise, specifically the use of OmniAuth, API authentication, and Authtrail. Let's dive s … | Continue reading


@blog.appsignal.com | 9 months ago

Add a Form to a Modal in Phoenix 1.7

In part one of this series, we introduced the core generated components when bootstrapping a new Phoenix project. We used a button and a modal from the core components to lay the groundwork for a "create modal". In this post, we will put a form onto the modal and create pets. Let … | Continue reading


@blog.appsignal.com | 9 months ago

An Introduction to Metaprogramming in Ruby

You've heard of metaprogramming: code you write that generates other code dynamically. Without it, Rails as we know it wouldn't (and couldn't) exist. But there's a good chance you've never done it yourself, and it's not hard to see why; even a brief excurs … | Continue reading


@blog.appsignal.com | 9 months ago

How to Delegate Methods in Ruby

Delegation in programming refers to handing off a task from one part of a program to another. It's an essential technique in object-oriented programming, empowering clean, maintainable code by ensuring that each object or method is responsible for a specific task or behavior. … | Continue reading


@blog.appsignal.com | 10 months ago

Observe Your Phoenix App with Structured Logging

In this post, we'll configure a Phoenix LiveView application to use a structured logger. We'll then use AppSignal to correlate log events with other telemetry signals, like exception reports and traces. Along the way, you'll learn about the benefits of structured logg … | Continue reading


@blog.appsignal.com | 10 months ago

An Introduction to Devise for Ruby on Rails

With over 20,000 GitHub stars and lots of integrations, the Devise gem is one of the most popular gems in the Ruby landscape. So why would we term it one of Ruby's "hidden" gems? Well, as popular as it is, most developers only scratch the surface of the library's capabili … | Continue reading


@blog.appsignal.com | 10 months ago

Boost HTTP Client Monitoring in Elixir with AppSignal and Tesla Templates

When relying on data from external services, it's important for the retrieval to be accurate and timely. While we may not control how efficiently an external API responds to our requests, we can control how and when we request data from that API. However, over time as your ap … | Continue reading


@blog.appsignal.com | 10 months ago

Multithreading with Worker Threads in Node.js

The beauty of Node is that while the main event loop runs in a single thread, some expensive tasks are automatically offloaded to a separate worker pool. These include the I/O-intensive DNS and File System (except fs.FSWatcher()) APIs, as well as the CPU-intensive Crypto and Zlib … | Continue reading


@blog.appsignal.com | 10 months ago

Monitoring Your Elixir GraphQL API with AppSignal

While a GraphQL API may be less susceptible to the common REST API performance issues of under and over-fetching data, allowing users to request and receive a wide range of data in a single, nestable query can also come with performance risks. AppSignal for Elixir now supports Ab … | Continue reading


@blog.appsignal.com | 10 months ago

Migrate Your Express Application to Fastify

Welcome to the final part of our Express to Fastify series. In the previous installments, we explored the unique features and advantages of Fastify over Express. Now, you'll put what you've learned so far into practice by migrating an existing Express application to Fasti … | Continue reading


@blog.appsignal.com | 10 months ago

Keep Your Ruby App Secure with Bundler

This article covers the use of bundler features to secure Ruby applications. In this day and age, we have to be more and more careful about software supply chain security. We'll show you how to start this journey by relying on a Gemfile and bundler to manage your project' … | Continue reading


@blog.appsignal.com | 10 months ago

Expand Your Monitoring Capabilities with AppSignal's Standalone Agent Docker Image

Want to monitor all of your application's services? Our Standalone Agent allows you to monitor processes our standard integrations don't monitor by default, helping you effortlessly expand your monitoring capabilities. To help simplify the process of configuring our stand … | Continue reading


@blog.appsignal.com | 10 months ago

An Introduction to Lambdas in Ruby

Lambdas are a powerful programming construct used in many languages. These functions allow developers to write code that is more concise, efficient, and easier to maintain, making Lambdas an essential part of any developer's toolkit. In this article, we'll explore how you … | Continue reading


@blog.appsignal.com | 10 months ago