Skip to content

passenger_preload_bundler does not work correctly with passenger_env_var RUBYOPT #2424

@Tietew

Description

@Tietew

Issue report

Question 1: What is the problem?

passenger_preload_bundler on; does not work correctly with passenger_env_var RUBYOPT something.

  • What is the expected behavior?
    Our Rack application works normally.

  • What is the actual behavior?
    Passenger fails to start the Rack application with following error:

Error: The application encountered the following error: You have already activated strscan 3.0.1,
but your Gemfile requires strscan 3.0.3. Since strscan is a default gem,
you can either remove your dependency on it or try updating to a newer version of bundler
that supports strscan as a default gem. (Gem::LoadError)
  • How can we reproduce it?
  1. Create a simple Rack app

Gemfile

source 'https://rubygems.org'
gem 'rack'
gem 'strscan' # Ruby 3.1's default gem is 3.0.1, current latest is 3.0.3

config.ru

#!/usr/bin/env ruby
require 'bundler/setup'
Bundler.require
run lambda { |env| [200, {'Content-Type'=>'text/plain'}, ["strscan=#{StringScanner::Version}\n"]] }
  1. Install
$ bundle
Fetching gem metadata from https://rubygems.org/..
Resolving dependencies...
Using bundler 2.3.13
Fetching rack 2.2.3
Fetching strscan 3.0.3
Installing strscan 3.0.3 with native extensions
Installing rack 2.2.3
Bundle complete! 2 Gemfile dependencies, 3 gems now installed.
Bundled gems are installed into `./vendor/bundle`
  1. Set up an Nginx config including passenger_env_var RUBYOPT.
server {
    listen 80;
    server_name myapp.example.com;
    root /var/www/test2/public;
    location / {
        passenger_enabled on;
        passenger_app_env production;
        passenger_app_root /var/www/test2;
        passenger_preload_bundler on;
        passenger_env_var RUBYOPT -W0; # just supress warnings
    }
}
  1. Access http://myapp.example.com

Question 2: Passenger version and integration mode:
Nginx 1.21.6
Passenger 6.0.14 (open source)

Question 3: OS or Linux distro, platform (including version):
Ubuntu 18.04 (bionic) x86_64

Question 4: Passenger installation method:
RubyGems, no Gemfile
(Passenger is installed globally with no Gemfile)

Question 5: Your app's programming language (including any version managers) and framework (including versions):
Ruby 3.1.2

Question 6: Are you using a PaaS and/or containerization? If so which one?
Amazon EC2

Question 7: Anything else about your setup that we should know?
Ruby is installed via rbenv globally.
nginx.conf includes following:

    passenger_root /usr/local/rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/passenger-6.0.14;
    passenger_ruby /usr/local/rbenv/shims/ruby;

When Gemfile includes gem 'strscan'

passenger_preload_bundler off; passenger_preload_bundler on;
No passenger_env_var error (intended) strscan=3.0.3
passenger_env_var RUBYOPT error (intended) ERROR (this issue)

When Gemfile DOES NOT include gem 'strscan'

passenger_preload_bundler off; passenger_preload_bundler on;
No passenger_env_var strscan=3.0.1 strscan=3.0.1
passenger_env_var RUBYOPT strscan=3.0.1 strscan=3.0.1

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions