padrino / padrino-framework

Padrino is a full-stack ruby framework built upon Sinatra.
http://www.padrinorb.com
MIT License
3.37k stars 508 forks source link

Padrino 0.16.0.pre3 fails to build with ruby 3.3.5 in Fedora 41 #2297

Closed renich closed 1 week ago

renich commented 3 weeks ago

Do you want to request a feature or report a bug?

A bug

What is the current behavior?

If one tries to install padrino using a Gemfile like:

source 'https://rubygems.org'

# Server requirements
gem 'thin' # or mongrel
# gem 'trinidad', :platform => 'jruby'

# Optional JSON codec (faster performance)
gem 'oj'

# Project requirements
gem 'rake'

# Stick to sinatra 2 since 3 is not supported yet
gem 'sinatra'

# Component requirements
gem 'base64'
gem 'dm-aggregates'
gem 'dm-constraints'
gem 'dm-core'
gem 'dm-migrations'
gem 'dm-sqlite-adapter'
gem 'dm-timestamps'
gem 'dm-types'
gem 'dm-validations'
gem 'redis'
gem 'slim'
gem 'tilt'

# Test requirements
gem 'capybara', :group => 'test'
gem 'cucumber', :group => 'test'
gem 'rack-test', :require => 'rack/test', :group => 'test'
gem 'rr', :group => 'test'
gem 'rspec', :group => 'test'

# Padrino
gem 'padrino', '>= 0.16.0.pre3'

# additional stuff
gem 'rss'

Will yield the following result:

$ bundle update
Fetching gem metadata from https://rubygems.org/.......
Resolving dependencies...
Using rack 3.1.8 (was 2.2.10)
Using moneta 1.6.0 (was 1.1.1)
Using padrino-support 0.16.0.pre3 (was 0.15.1)
Using rack-protection 4.0.0 (was 2.2.2)
Using mustermann 3.0.3 (was 2.0.2)
Using padrino-helpers 0.16.0.pre3 (was 0.15.1)
Using sinatra 4.0.0 (was 2.2.2)
Using padrino-core 0.16.0.pre3 (was 0.15.1)
Using padrino-admin 0.16.0.pre3 (was 0.15.1)
Using padrino-cache 0.16.0.pre3 (was 0.15.1)
Using padrino-gen 0.16.0.pre3 (was 0.15.1)
Using padrino-mailer 0.16.0.pre3 (was 0.15.1)
Using padrino 0.16.0.pre3 (was 0.15.1)
Installing thin 1.6.2 (was 1.8.2) with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /srv/www/padrino/evalinux.com/default/vendor/bundle/ruby/3.3.0/gems/thin-1.6.2/ext/thin_parser
/usr/bin/ruby -I/usr/share/rubygems extconf.rb
checking for main() in -lc... yes
creating Makefile

current directory: /srv/www/padrino/evalinux.com/default/vendor/bundle/ruby/3.3.0/gems/thin-1.6.2/ext/thin_parser
make DESTDIR\= sitearchdir\=./.gem.20241030-32285-7mnyrx sitelibdir\=./.gem.20241030-32285-7mnyrx clean
rm -f 
rm -fr thin_parser.so false parser.o thin.o *.bak mkmf.log .*.time

current directory: /srv/www/padrino/evalinux.com/default/vendor/bundle/ruby/3.3.0/gems/thin-1.6.2/ext/thin_parser
make DESTDIR\= sitearchdir\=./.gem.20241030-32285-7mnyrx sitelibdir\=./.gem.20241030-32285-7mnyrx
gcc -I. -I/usr/include -I/usr/include/ruby/backward -I/usr/include -I.   -fPIC -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security
-Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -march=x86-64
-mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -m64 -o parser.o -c parser.c
parser.c:31:18: warning: ‘http_parser_en_main’ defined but not used [-Wunused-const-variable=]
   31 | static const int http_parser_en_main = 1;
      |                  ^~~~~~~~~~~~~~~~~~~
gcc -I. -I/usr/include -I/usr/include/ruby/backward -I/usr/include -I.   -fPIC -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security
-Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -march=x86-64
-mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -m64 -o thin.o -c thin.c
thin.c: In function ‘Thin_HttpParser_alloc’:
thin.c:242:3: error: implicit declaration of function ‘thin_http_parser_init’; did you mean ‘http_parser_init’? [-Wimplicit-function-declaration]
  242 |   thin_http_parser_init(hp);
      |   ^~~~~~~~~~~~~~~~~~~~~
      |   http_parser_init
thin.c: In function ‘Thin_HttpParser_finish’:
thin.c:294:3: error: implicit declaration of function ‘thin_http_parser_finish’; did you mean ‘Thin_HttpParser_finish’? [-Wimplicit-function-declaration]
  294 |   thin_http_parser_finish(http);
      |   ^~~~~~~~~~~~~~~~~~~~~~~
      |   Thin_HttpParser_finish
thin.c:296:10: error: implicit declaration of function ‘thin_http_parser_is_finished’; did you mean ‘http_parser_is_finished’? [-Wimplicit-function-declaration]
  296 |   return thin_http_parser_is_finished(http) ? Qtrue : Qfalse;
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |          http_parser_is_finished
thin.c: In function ‘Thin_HttpParser_execute’:
thin.c:334:5: error: implicit declaration of function ‘thin_http_parser_execute’; did you mean ‘Thin_HttpParser_execute’? [-Wimplicit-function-declaration]
  334 |     thin_http_parser_execute(http, dptr, dlen, from);
      |     ^~~~~~~~~~~~~~~~~~~~~~~~
      |     Thin_HttpParser_execute
thin.c:338:8: error: implicit declaration of function ‘thin_http_parser_has_error’; did you mean ‘http_parser_has_error’? [-Wimplicit-function-declaration]
  338 |     if(thin_http_parser_has_error(http)) {
      |        ^~~~~~~~~~~~~~~~~~~~~~~~~~
      |        http_parser_has_error
make: *** [Makefile:249: thin.o] Error 1

make failed, exit code 2

Gem files will remain installed in /srv/www/padrino/evalinux.com/default/vendor/bundle/ruby/3.3.0/gems/thin-1.6.2 for inspection.
Results logged to /srv/www/padrino/evalinux.com/default/vendor/bundle/ruby/3.3.0/extensions/x86_64-linux/3.3.0/thin-1.6.2/gem_make.out

  /usr/share/rubygems/rubygems/ext/builder.rb:125:in `run'
  /usr/share/rubygems/rubygems/ext/builder.rb:51:in `block in make'
  /usr/share/rubygems/rubygems/ext/builder.rb:43:in `each'
  /usr/share/rubygems/rubygems/ext/builder.rb:43:in `make'
  /usr/share/rubygems/rubygems/ext/ext_conf_builder.rb:42:in `build'
  /usr/share/rubygems/rubygems/ext/builder.rb:193:in `build_extension'
  /usr/share/rubygems/rubygems/ext/builder.rb:227:in `block in build_extensions'
  /usr/share/rubygems/rubygems/ext/builder.rb:224:in `each'
  /usr/share/rubygems/rubygems/ext/builder.rb:224:in `build_extensions'
  /usr/share/rubygems/rubygems/installer.rb:855:in `build_extensions'
  /usr/share/gems/gems/bundler-2.5.16/lib/bundler/rubygems_gem_installer.rb:109:in `build_extensions'
  /usr/share/gems/gems/bundler-2.5.16/lib/bundler/rubygems_gem_installer.rb:28:in `install'
  /usr/share/gems/gems/bundler-2.5.16/lib/bundler/source/rubygems.rb:205:in `install'
  /usr/share/gems/gems/bundler-2.5.16/lib/bundler/installer/gem_installer.rb:54:in `install'
  /usr/share/gems/gems/bundler-2.5.16/lib/bundler/installer/gem_installer.rb:16:in `install_from_spec'
  /usr/share/gems/gems/bundler-2.5.16/lib/bundler/installer/parallel_installer.rb:132:in `do_install'
  /usr/share/gems/gems/bundler-2.5.16/lib/bundler/installer/parallel_installer.rb:123:in `block in worker_pool'
  /usr/share/gems/gems/bundler-2.5.16/lib/bundler/worker.rb:62:in `apply_func'
  /usr/share/gems/gems/bundler-2.5.16/lib/bundler/worker.rb:57:in `block in process_queue'
  <internal:kernel>:187:in `loop'
  /usr/share/gems/gems/bundler-2.5.16/lib/bundler/worker.rb:54:in `process_queue'
  /usr/share/gems/gems/bundler-2.5.16/lib/bundler/worker.rb:90:in `block (2 levels) in create_threads'

An error occurred while installing thin (1.6.2), and Bundler cannot continue.

In Gemfile:
  thin

IMHO, the problem seems to be the thin 1.6.2 dependency. They don't support ruby 3.2 until v1.8.2: https://github.com/macournoyer/thin/blob/master/CHANGELOG#L2

What is the expected behavior?

It should build successfully.

Which versions of Ruby, Padrino, Sinatra, Rack, OS are you using? Did this work in previous versions?

ruby: 3.3.5 sinatra: 4.0.0 rack: 4.0.0 OS: Fedora 41

renich commented 2 weeks ago

If one tries to force 1.8.2, then one get's this error:

$ cat Gemfile 
source 'https://rubygems.org'

# Server requirements
gem 'thin', '>= 1.8.2'

# Optional JSON codec (faster performance)
gem 'oj'

# Project requirements
gem 'rake'

# Component requirements
gem 'base64'
gem 'dm-aggregates'
gem 'dm-constraints'
gem 'dm-core'
gem 'dm-migrations'
gem 'dm-sqlite-adapter'
gem 'dm-timestamps'
gem 'dm-types'
gem 'dm-validations'
gem 'redis'
gem 'slim'
gem 'tilt'

# Padrino
gem 'padrino', '>= 0.16.0.pre3'

# additional stuff
gem 'rss'

$ bundle
Fetching gem metadata from https://rubygems.org/.........
Resolving dependencies...
Could not find compatible versions

Because padrino >= 0.16.0.pre3 depends on padrino-core = 0.16.0.pre3
  and padrino-core >= 0.16.0.pre2 depends on sinatra ~> 4,
  padrino >= 0.16.0.pre3 requires sinatra ~> 4.
And because sinatra >= 4.0.0 depends on rack >= 3.0.0, < 4
  and thin >= 1.7.0 depends on rack >= 1, < 3,
  padrino >= 0.16.0.pre3 is incompatible with thin >= 1.7.0.
So, because Gemfile depends on thin >= 1.8.2
  and Gemfile depends on padrino >= 0.16.0.pre3,
  version solving has failed.
renich commented 2 weeks ago

Another note. If I remove versions from the gemfile, I get padrino 0.15.3 and thin 1.8.2. In that case, it builds, but it fails to run:

$ bundle update
Fetching gem metadata from https://rubygems.org/.........
Resolving dependencies...
Fetching rake 13.2.1
Installing rake 13.2.1
Fetching public_suffix 6.0.1
Fetching base64 0.2.0
Fetching bcrypt 3.1.20
Fetching bigdecimal 3.1.8
Fetching concurrent-ruby 1.3.4
Fetching connection_pool 2.4.1
Fetching daemons 1.4.1
Fetching date 3.4.0
Fetching fastercsv 1.5.5
Fetching json 1.8.6
Fetching multi_json 1.15.0
Fetching stringex 1.5.1
Fetching uuidtools 2.2.0
Fetching eventmachine 1.2.7
Fetching logger 1.6.1
Fetching mini_mime 1.1.5
Installing public_suffix 6.0.1
Fetching timeout 0.4.1
Installing base64 0.2.0
Fetching mime-types-data 3.2024.1001
Installing bcrypt 3.1.20 with native extensions
Installing bigdecimal 3.1.8 with native extensions
Installing concurrent-ruby 1.3.4
Fetching moneta 1.1.1
Installing connection_pool 2.4.1
Fetching ruby2_keywords 0.0.5
Installing daemons 1.4.1
Fetching ostruct 0.6.0
Installing date 3.4.0 with native extensions
Installing fastercsv 1.5.5
Fetching padrino-support 0.15.3
Installing json 1.8.6 with native extensions
Fetching rack 2.2.10
Installing multi_json 1.15.0
Fetching tilt 2.4.0
Installing stringex 1.5.1
Fetching thor 1.3.2
Installing uuidtools 2.2.0
Fetching rexml 3.3.9
Installing eventmachine 1.2.7 with native extensions
Installing logger 1.6.1
Fetching temple 0.10.3
Installing mini_mime 1.1.5
Fetching addressable 2.8.7
Installing timeout 0.4.1
Fetching i18n 1.14.6
Installing mime-types-data 3.2024.1001
Fetching redis-client 0.22.2
Installing moneta 1.1.1
Fetching bcrypt-ruby 3.1.5
Installing ruby2_keywords 0.0.5
Fetching net-protocol 0.2.2
Installing ostruct 0.6.0
Fetching mime-types 3.6.0
Installing padrino-support 0.15.3
Fetching mustermann 3.0.3
Installing rack 2.2.10
Fetching rack-protection 3.2.0
Installing tilt 2.4.0
Installing thor 1.3.2
Installing rexml 3.3.9
Fetching rss 0.3.1
Installing temple 0.10.3
Fetching slim 5.2.1
Installing addressable 2.8.7
Fetching data_objects 0.10.17
Fetching dm-core 1.2.1
Installing i18n 1.14.6
Fetching padrino-helpers 0.15.3
Installing redis-client 0.22.2
Fetching redis 5.3.0
Installing bcrypt-ruby 3.1.5
Installing net-protocol 0.2.2
Fetching net-pop 0.1.2
Fetching net-smtp 0.5.0
Installing mime-types 3.6.0
Installing mustermann 3.0.3
Installing rack-protection 3.2.0
Fetching sinatra 3.2.0
Installing rss 0.3.1
Installing slim 5.2.1
Installing data_objects 0.10.17
Fetching do_sqlite3 0.10.17
Fetching net-imap 0.5.0
Installing dm-core 1.2.1
Fetching dm-aggregates 1.2.0
Fetching dm-constraints 1.2.0
Fetching dm-do-adapter 1.2.0
Fetching dm-migrations 1.2.0
Fetching dm-timestamps 1.2.0
Fetching dm-types 1.2.2
Fetching dm-validations 1.2.0
Installing padrino-helpers 0.15.3
Installing redis 5.3.0
Installing net-pop 0.1.2
Installing net-smtp 0.5.0
Installing sinatra 3.2.0
Fetching padrino-core 0.15.3
Installing do_sqlite3 0.10.17 with native extensions
Installing net-imap 0.5.0
Fetching mail 2.8.1
Installing dm-aggregates 1.2.0
Installing dm-constraints 1.2.0
Installing dm-do-adapter 1.2.0
Installing dm-migrations 1.2.0
Installing dm-timestamps 1.2.0
Installing dm-types 1.2.2
Installing dm-validations 1.2.0
Installing padrino-core 0.15.3
Fetching padrino-admin 0.15.3
Fetching padrino-cache 0.15.3
Fetching padrino-gen 0.15.3
Installing mail 2.8.1
Fetching padrino-mailer 0.15.3
Installing padrino-admin 0.15.3
Installing padrino-cache 0.15.3
Installing padrino-gen 0.15.3
Installing padrino-mailer 0.15.3
Fetching padrino 0.15.3
Installing padrino 0.15.3
Fetching dm-sqlite-adapter 1.2.0
Installing dm-sqlite-adapter 1.2.0
Fetching oj 3.16.7
Installing oj 3.16.7 with native extensions
Fetching thin 1.8.2
Installing thin 1.8.2 with native extensions
Bundle updated!
Post-install message from bcrypt-ruby:

#######################################################

The bcrypt-ruby gem has changed its name to just bcrypt.  Instead of
installing `bcrypt-ruby`, you should install `bcrypt`.  Please update your
dependencies accordingly.

#######################################################

Post-install message from i18n:
PSA: I18n will be dropping support for Ruby < 3.2 in the next major release (April 2025), due to Ruby's end of life for 3.1 and below (https://endoflife.date/ruby). Please upgrade to Ruby 3.2 or newer by April 2025 to continue using future versions of this gem.
1 installed gem you directly depend on is looking for funding.
  Run `bundle fund` for details

$ bundle exec thin start
2024-11-05 11:30:45 -0600 Using rack adapter
bundler: failed to load command: thin (/srv/www/padrino/evalinux.com/default/vendor/bundle/ruby/3.3.0/bin/thin)
/usr/share/gems/gems/abrt-0.4.0/lib/abrt.rb:8: warning: syslog was loaded from the standard library, but will no longer be part of the default gems starting from Ruby 3.4.0.
You can add syslog to your Gemfile or gemspec to silence this warning.
/srv/www/padrino/evalinux.com/default/vendor/bundle/ruby/3.3.0/gems/padrino-core-0.15.3/lib/padrino-core/router.rb:61:in `initialize': wrong number of arguments (given 3, expected 1..2) (ArgumentError)

      match = Regexp.new("^#{Regexp.quote(path).gsub('/', '/+')}(.*)", nil, 'n')
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    from /srv/www/padrino/evalinux.com/default/vendor/bundle/ruby/3.3.0/gems/padrino-core-0.15.3/lib/padrino-core/router.rb:61:in `new'
    from /srv/www/padrino/evalinux.com/default/vendor/bundle/ruby/3.3.0/gems/padrino-core-0.15.3/lib/padrino-core/router.rb:61:in `map'
    from /srv/www/padrino/evalinux.com/default/vendor/bundle/ruby/3.3.0/gems/padrino-core-0.15.3/lib/padrino-core/mounter.rb:116:in `map_onto'
    from /srv/www/padrino/evalinux.com/default/vendor/bundle/ruby/3.3.0/gems/padrino-core-0.15.3/lib/padrino-core.rb:74:in `block in application'
    from /srv/www/padrino/evalinux.com/default/vendor/bundle/ruby/3.3.0/gems/padrino-core-0.15.3/lib/padrino-core.rb:74:in `each'
    from /srv/www/padrino/evalinux.com/default/vendor/bundle/ruby/3.3.0/gems/padrino-core-0.15.3/lib/padrino-core.rb:74:in `application'
    from /srv/www/padrino/evalinux.com/default/config.ru:7:in `block in <main>'
    from /srv/www/padrino/evalinux.com/default/vendor/bundle/ruby/3.3.0/gems/rack-2.2.10/lib/rack/builder.rb:125:in `instance_eval'
    from /srv/www/padrino/evalinux.com/default/vendor/bundle/ruby/3.3.0/gems/rack-2.2.10/lib/rack/builder.rb:125:in `initialize'
    from /srv/www/padrino/evalinux.com/default/config.ru:1:in `new'
    from /srv/www/padrino/evalinux.com/default/config.ru:1:in `<main>'
    from /srv/www/padrino/evalinux.com/default/vendor/bundle/ruby/3.3.0/gems/thin-1.8.2/lib/rack/adapter/loader.rb:33:in `eval'
    from /srv/www/padrino/evalinux.com/default/vendor/bundle/ruby/3.3.0/gems/thin-1.8.2/lib/rack/adapter/loader.rb:33:in `load'
    from /srv/www/padrino/evalinux.com/default/vendor/bundle/ruby/3.3.0/gems/thin-1.8.2/lib/rack/adapter/loader.rb:42:in `for'
    from /srv/www/padrino/evalinux.com/default/vendor/bundle/ruby/3.3.0/gems/thin-1.8.2/lib/thin/controllers/controller.rb:170:in `load_adapter'
    from /srv/www/padrino/evalinux.com/default/vendor/bundle/ruby/3.3.0/gems/thin-1.8.2/lib/thin/controllers/controller.rb:74:in `start'
    from /srv/www/padrino/evalinux.com/default/vendor/bundle/ruby/3.3.0/gems/thin-1.8.2/lib/thin/runner.rb:203:in `run_command'
    from /srv/www/padrino/evalinux.com/default/vendor/bundle/ruby/3.3.0/gems/thin-1.8.2/lib/thin/runner.rb:159:in `run!'
    from /srv/www/padrino/evalinux.com/default/vendor/bundle/ruby/3.3.0/gems/thin-1.8.2/bin/thin:6:in `<top (required)>'
    from /srv/www/padrino/evalinux.com/default/vendor/bundle/ruby/3.3.0/bin/thin:25:in `load'
    from /srv/www/padrino/evalinux.com/default/vendor/bundle/ruby/3.3.0/bin/thin:25:in `<top (required)>'
    from /usr/share/gems/gems/bundler-2.5.16/lib/bundler/cli/exec.rb:58:in `load'
    from /usr/share/gems/gems/bundler-2.5.16/lib/bundler/cli/exec.rb:58:in `kernel_load'
    from /usr/share/gems/gems/bundler-2.5.16/lib/bundler/cli/exec.rb:23:in `run'
    from /usr/share/gems/gems/bundler-2.5.16/lib/bundler/cli.rb:455:in `exec'
    from /usr/share/gems/gems/bundler-2.5.16/lib/bundler/vendor/thor/lib/thor/command.rb:28:in `run'
    from /usr/share/gems/gems/bundler-2.5.16/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
    from /usr/share/gems/gems/bundler-2.5.16/lib/bundler/vendor/thor/lib/thor.rb:527:in `dispatch'
    from /usr/share/gems/gems/bundler-2.5.16/lib/bundler/cli.rb:35:in `dispatch'
    from /usr/share/gems/gems/bundler-2.5.16/lib/bundler/vendor/thor/lib/thor/base.rb:584:in `start'
    from /usr/share/gems/gems/bundler-2.5.16/lib/bundler/cli.rb:29:in `start'
    from /usr/share/gems/gems/bundler-2.5.16/exe/bundle:28:in `block in <top (required)>'
    from /usr/share/gems/gems/bundler-2.5.16/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
    from /usr/share/gems/gems/bundler-2.5.16/exe/bundle:20:in `<top (required)>'
    from /usr/bin/bundle:25:in `load'
    from /usr/bin/bundle:25:in `<main>'
renich commented 2 weeks ago

And, finally, this happens on a brand new project as well:

$ padrino version
Padrino v. 0.15.3

$ padrino generate project testapp
      create  
      create  .gitignore
      create  config.ru
      create  config/apps.rb
      create  config/boot.rb
      create  public/favicon.ico
      create  public/images
      create  public/javascripts
      create  public/stylesheets
      create  .components
      create  app
      create  app/app.rb
      create  app/controllers
      create  app/helpers
      create  app/views
      create  app/views/layouts
      append  config/apps.rb
      create  Gemfile
      create  Rakefile
      create  exe/testapp
      create  tmp
      create  tmp/.keep
      create  log
      create  log/.keep
    skipping  orm component...
    skipping  test component...
    skipping  mock component...
    skipping  script component...
    skipping  renderer component...
    skipping  stylesheet component...
   identical  .components
       force  .components
       force  .components

=================================================================
testapp is ready for development!
=================================================================
$ cd ./testapp
$ bundle --binstubs
=================================================================

$ cd testapp/

$ bundle binstubs --all
Fetching gem metadata from https://rubygems.org/.........
Resolving dependencies...
Bundle complete! 2 Gemfile dependencies, 33 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.

$ bundle exec thin start
bundler: failed to load command: thin (/home/renich/bin/thin)
/usr/share/gems/gems/abrt-0.4.0/lib/abrt.rb:8: warning: syslog was loaded from the standard library, but will no longer be part of the default gems starting from Ruby 3.4.0.
You can add syslog to your Gemfile or gemspec to silence this warning.
/usr/share/gems/gems/bundler-2.5.16/lib/bundler/rubygems_integration.rb:265:in `block in replace_bin_path': can't find executable thin for gem thin. thin is not currently included in the bundle, perhaps you meant to add it to your Gemfile? (Gem::Exception)
    from /usr/share/gems/gems/bundler-2.5.16/lib/bundler/rubygems_integration.rb:293:in `block in replace_bin_path'
    from /home/renich/bin/thin:25:in `<top (required)>'
    from /usr/share/gems/gems/bundler-2.5.16/lib/bundler/cli/exec.rb:58:in `load'
    from /usr/share/gems/gems/bundler-2.5.16/lib/bundler/cli/exec.rb:58:in `kernel_load'
    from /usr/share/gems/gems/bundler-2.5.16/lib/bundler/cli/exec.rb:23:in `run'
    from /usr/share/gems/gems/bundler-2.5.16/lib/bundler/cli.rb:455:in `exec'
    from /usr/share/gems/gems/bundler-2.5.16/lib/bundler/vendor/thor/lib/thor/command.rb:28:in `run'
    from /usr/share/gems/gems/bundler-2.5.16/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
    from /usr/share/gems/gems/bundler-2.5.16/lib/bundler/vendor/thor/lib/thor.rb:527:in `dispatch'
    from /usr/share/gems/gems/bundler-2.5.16/lib/bundler/cli.rb:35:in `dispatch'
    from /usr/share/gems/gems/bundler-2.5.16/lib/bundler/vendor/thor/lib/thor/base.rb:584:in `start'
    from /usr/share/gems/gems/bundler-2.5.16/lib/bundler/cli.rb:29:in `start'
    from /usr/share/gems/gems/bundler-2.5.16/exe/bundle:28:in `block in <top (required)>'
    from /usr/share/gems/gems/bundler-2.5.16/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
    from /usr/share/gems/gems/bundler-2.5.16/exe/bundle:20:in `<top (required)>'
    from /usr/bin/bundle:25:in `load'
    from /usr/bin/bundle:25:in `<main>'
renich commented 2 weeks ago

With padrino 0.16.0.pre3 is a bit different. It asks for 'syslog' to be installed and thin 1.6.2 fails to build.

$ gem install -v '0.16.0.pre3' padrino
Successfully installed padrino-0.16.0.pre3
1 gem installed

$ padrino version
Padrino v. 0.16.0.pre3

$ padrino generate project testapp
      create
      create  .gitignore
      create  config.ru
      create  config/apps.rb
      create  config/boot.rb
      create  public/favicon.ico
      create  public/images
      create  public/javascripts
      create  public/stylesheets
      create  .components
      create  app
      create  app/app.rb
      create  app/controllers
      create  app/helpers
      create  app/views
      create  app/views/layouts
      append  config/apps.rb
      create  Gemfile
      create  Rakefile
      create  exe/testapp
      create  tmp
      create  tmp/.keep
      create  log
      create  log/.keep
    skipping  orm component...
    skipping  test component...
    skipping  mock component...
    skipping  script component...
    skipping  renderer component...
    skipping  stylesheet component...
   identical  .components
       force  .components
       force  .components

=================================================================
testapp is ready for development!
=================================================================
$ cd ./testapp

$ bundle --binstubs
=================================================================

$ cd testapp/

$ cat << EOF > Gemfile
source 'https://rubygems.org'

gem 'oj'
gem 'padrino', '0.16.0.pre3'
gem 'rake'
gem 'syslog'
gem 'thin'
EOF

$ bundle binstubs --all
Resolving dependencies...
Could not find compatible versions

Because every version of thin depends on rack >= 1, < 3
  and sinatra >= 4.0.0 depends on rack >= 3.0.0, < 4,
  every version of thin is incompatible with sinatra >= 4.0.0.
And because padrino-core >= 0.16.0.pre3 depends on sinatra ~> 4
  and every version of padrino depends on padrino-core = 0.16.0.pre3,
  every version of thin is incompatible with padrino >= 0.
So, because Gemfile depends on padrino = 0.16.0.pre3
  and Gemfile depends on thin >= 0,
  version solving has failed.

$ bundle update
Fetching gem metadata from https://rubygems.org/.........
Resolving dependencies...
Installing thin 1.6.2 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /home/renich/.local/share/gem/ruby/gems/thin-1.6.2/ext/thin_parser
/usr/bin/ruby -I/usr/share/rubygems extconf.rb
checking for main() in -lc... yes
creating Makefile

current directory: /home/renich/.local/share/gem/ruby/gems/thin-1.6.2/ext/thin_parser
make DESTDIR\= sitearchdir\=./.gem.20241105-39476-guh0ud sitelibdir\=./.gem.20241105-39476-guh0ud clean
rm -f
rm -fr thin_parser.so false parser.o thin.o *.bak mkmf.log .*.time

current directory: /home/renich/.local/share/gem/ruby/gems/thin-1.6.2/ext/thin_parser
make DESTDIR\= sitearchdir\=./.gem.20241105-39476-guh0ud sitelibdir\=./.gem.20241105-39476-guh0ud
gcc -I. -I/usr/include -I/usr/include/ruby/backward -I/usr/include -I.   -fPIC -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security
-Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -march=x86-64
-mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -m64 -o parser.o -c parser.c
parser.c:31:18: warning: ‘http_parser_en_main’ defined but not used [-Wunused-const-variable=]
   31 | static const int http_parser_en_main = 1;
      |                  ^~~~~~~~~~~~~~~~~~~
gcc -I. -I/usr/include -I/usr/include/ruby/backward -I/usr/include -I.   -fPIC -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security
-Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -march=x86-64
-mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -m64 -o thin.o -c thin.c
thin.c: In function ‘Thin_HttpParser_alloc’:
thin.c:242:3: error: implicit declaration of function ‘thin_http_parser_init’; did you mean ‘http_parser_init’? [-Wimplicit-function-declaration]
  242 |   thin_http_parser_init(hp);
      |   ^~~~~~~~~~~~~~~~~~~~~
      |   http_parser_init
thin.c: In function ‘Thin_HttpParser_finish’:
thin.c:294:3: error: implicit declaration of function ‘thin_http_parser_finish’; did you mean ‘Thin_HttpParser_finish’? [-Wimplicit-function-declaration]
  294 |   thin_http_parser_finish(http);
      |   ^~~~~~~~~~~~~~~~~~~~~~~
      |   Thin_HttpParser_finish
thin.c:296:10: error: implicit declaration of function ‘thin_http_parser_is_finished’; did you mean ‘http_parser_is_finished’? [-Wimplicit-function-declaration]
  296 |   return thin_http_parser_is_finished(http) ? Qtrue : Qfalse;
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |          http_parser_is_finished
thin.c: In function ‘Thin_HttpParser_execute’:
thin.c:334:5: error: implicit declaration of function ‘thin_http_parser_execute’; did you mean ‘Thin_HttpParser_execute’? [-Wimplicit-function-declaration]
  334 |     thin_http_parser_execute(http, dptr, dlen, from);
      |     ^~~~~~~~~~~~~~~~~~~~~~~~
      |     Thin_HttpParser_execute
thin.c:338:8: error: implicit declaration of function ‘thin_http_parser_has_error’; did you mean ‘http_parser_has_error’? [-Wimplicit-function-declaration]
  338 |     if(thin_http_parser_has_error(http)) {
      |        ^~~~~~~~~~~~~~~~~~~~~~~~~~
      |        http_parser_has_error
make: *** [Makefile:249: thin.o] Error 1

make failed, exit code 2

Gem files will remain installed in /home/renich/.local/share/gem/ruby/gems/thin-1.6.2 for inspection.
Results logged to /home/renich/.local/share/gem/ruby/extensions/x86_64-linux/3.3.0/thin-1.6.2/gem_make.out

  /usr/share/rubygems/rubygems/ext/builder.rb:125:in `run'
  /usr/share/rubygems/rubygems/ext/builder.rb:51:in `block in make'
  /usr/share/rubygems/rubygems/ext/builder.rb:43:in `each'
  /usr/share/rubygems/rubygems/ext/builder.rb:43:in `make'
  /usr/share/rubygems/rubygems/ext/ext_conf_builder.rb:42:in `build'
  /usr/share/rubygems/rubygems/ext/builder.rb:193:in `build_extension'
  /usr/share/rubygems/rubygems/ext/builder.rb:227:in `block in build_extensions'
  /usr/share/rubygems/rubygems/ext/builder.rb:224:in `each'
  /usr/share/rubygems/rubygems/ext/builder.rb:224:in `build_extensions'
  /usr/share/rubygems/rubygems/installer.rb:855:in `build_extensions'
  /usr/share/gems/gems/bundler-2.5.16/lib/bundler/rubygems_gem_installer.rb:109:in `build_extensions'
  /usr/share/gems/gems/bundler-2.5.16/lib/bundler/rubygems_gem_installer.rb:28:in `install'
  /usr/share/gems/gems/bundler-2.5.16/lib/bundler/source/rubygems.rb:205:in `install'
  /usr/share/gems/gems/bundler-2.5.16/lib/bundler/installer/gem_installer.rb:54:in `install'
  /usr/share/gems/gems/bundler-2.5.16/lib/bundler/installer/gem_installer.rb:16:in `install_from_spec'
  /usr/share/gems/gems/bundler-2.5.16/lib/bundler/installer/parallel_installer.rb:132:in `do_install'
  /usr/share/gems/gems/bundler-2.5.16/lib/bundler/installer/parallel_installer.rb:123:in `block in worker_pool'
  /usr/share/gems/gems/bundler-2.5.16/lib/bundler/worker.rb:62:in `apply_func'
  /usr/share/gems/gems/bundler-2.5.16/lib/bundler/worker.rb:57:in `block in process_queue'
  <internal:kernel>:187:in `loop'
  /usr/share/gems/gems/bundler-2.5.16/lib/bundler/worker.rb:54:in `process_queue'
  /usr/share/gems/gems/bundler-2.5.16/lib/bundler/worker.rb:90:in `block (2 levels) in create_threads'

An error occurred while installing thin (1.6.2), and Bundler cannot continue.

In Gemfile:
  thin
chaymaeBZ commented 1 week ago

Hi @renich, thank you for this. However, I don't see this as an issue with Fedora 41 specifically. I am having the same issues on macOS Sequoia (v 15.1). The problem is that : in order to bundle with ruby 3.x, you need thin 1.8.2 and padrino 0.16.X. However, these 2 create a dependency issue. down the dependency line padrino 0.16.X indirectly depends on rack >= 3 and thin 1.8.2 depends on rack < 3. Using a lower version of thin or padrino will yield ruby 3.X issues. So there are 3 options you can go for :

1 - The easiest way is to use padrino 0.15.3 + thin 1.8.2 + ruby 2.X 2 - Wait for thin to have compatibility for rack >= 3 3 - Maybe ask @olleolleolle if it makes sense to backport ruby 3 support to padrino 0.15.X ? (literally cherry picking #2277 )

renich commented 1 week ago

I'm grateful for the work done here. I wouldn't be able to ask for a backport. I'll have to wait until thin decides to support rack >=3. I cannot downgrade to Ruby 2.x for many reasons.

Thank you, @chaymaeBZ.

chaymaeBZ commented 1 week ago

@olleolleolle or @nesquena can you mark this as closed? This depends on https://github.com/macournoyer/thin/pull/399 as solution, so it's outside our scope

nesquena commented 1 week ago

Thanks @chaymaeBZ