Extension compilation system dependencies are required at runtime

Affected components

  • AppSignal for Elixir package versions: Only v1.8.0.
    • Linux builds fixed in v1.8.1.
  • AppSignal for Ruby package versions: v2.7.0 and v2.7.1, but less likely to occur. Read more in the description.
    • Linux builds fixed in v2.7.2.
  • Systems:
    • Linux musl builds.
    • Linux libc builds. (Less common.)
    • FreeBSD builds. (Less common.)

Description

After installing AppSignal for Elixir 1.8.0, or AppSignal for Ruby 2.7.0-2.7.1, no more data is being received by AppSignal. During the start of the app that has AppSignal installed an error message is printed. The app itself is otherwise unaffected.

A new build of the AppSignal extension requires compilation dependencies to be installed on the machine the parent app is executed. This change in behavior, this new requirement, was unintentionally introduced in these AppSignal releases.

This issue is most commonly seen with Elixir apps that have a two stage release process as it's more common for Elixir. On one machine the app is compiled and packaged into a release with a tool such as Distillery. The first stage has all the required compilation dependencies, but the second stage does not.

In the affected releases not all dependencies are statically linked during installation of the AppSignal package/gem. The extension is instead dynamically linked to a system library (most likely libgcc_s) on the compile stage machine, a package that isn't present on the second stage machine. The missing package causes the AppSignal extension to be unable to start and deactivates itself.

The following builds are affected:

  • Linux musl builds. Used by Alpine Linux and older libc versions installed on app hosts.
  • Linux libc builds. Less likely to be affected, required packages are usually available on the host system.
  • FreeBSD builds. Less likely to be affected, required packages are usually available on the host system.

Symptoms

  • No data is being received by AppSignal from your app.

  • When your application starts AppSignal for Elixir prints the following message:

    [error] Failed to start AppSignal. Please run the diagnose task (https://docs.appsignal.com/elixir/command-line/diagnose.html) to debug your installation.
    
  • The install.log file in the AppSignal package contains a platform specific error message.

Workaround

  1. Install the system dependencies for your Operating System as listed on the Supported Operating Systems page on the host your app is running.
  2. Downgrade to AppSignal for Elixir version 1.7.2 or AppSignal for Ruby version 2.6.1.

Solution

The Linux musl and libc builds are fixed in the latest AppSignal packages.

No specific changes were made for the installation of the AppSignal extension for the FreeBSD build. It's less likely to be affected. No complete fix has been be found either to link the required dependencies to the extension package.

  • Elixir package
    • For AppSignal for Elixir a new version with a fix for this issue has been released. Please install AppSignal for Elixir version 1.8.1 or higher.
  • Ruby gem
    • For AppSignal for Ruby a new version with a fix for this issue has been released. Please install AppSignal for Ruby version 2.7.2 or higher.

Please let us know at support@appsignal.com if you are currently experiencing this issue. It would help us a lot if you provide the following information:

  • AppSignal diagnose (Ruby / Elixir) report token. (Send the report to us when prompted.)
  • A description of your app's build/compile/release process.

Want to help us improve this documentation page?

Create a pull request

Need more help?

Contact us and speak directly with the engineers working on AppSignal. They will help you get set up, tweak your code and make sure you get the most out of using AppSignal.

Contact us

Start a trial - 30 days free

AppSignal is a great way to monitor your Ruby, Elixir & Node.js applications. Works great with Rails, Phoenix, Express and other frameworks, with support for background jobs too. Let's improve your apps together.

Start a trial