passenger
passenger copied to clipboard
`passenger_preload_bundler` does not work correctly with `passenger_env_var RUBYOPT`
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?
- 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"]] }
- 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`
- 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
}
}
- 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 |
Update: YJIT is unrelated. Defining RUBYOPT
will trigger this issue.
Workaround: Following settings works correctly:
passenger_env_var RUBYOPT "-W0 -rbundler/setup";
Working on this for next release.
6.0.15 works fine. Thank you.