When running `rails new app` running the `bundle install` internally on the
rubygem-rails RPM version 7.0.8, the command tries to install the upstream
rails gem version 7.0.8.7, and that triggers the following error.
This commit fixes the error by using the rubygem-rails RPM version 7.0.8 rather
than installing the upstream rails 7.0.8.7.
```
$ tmt -c distro=fedora-rawhide run --all provision -h virtual -i fedora-rawhide tests -n '^/run-basic-rails-application$'
/var/tmp/tmt/run-039
...
$ tmt run --id run-039 report -vvv
...
:: [ 13:37:43 ] :: [ BEGIN ] :: Creating new rails application :: actually running 'rails new app | tee bundle.log'
...
Bundle complete! 14 Gemfile dependencies, 78 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
1 installed gem you directly depend on is looking for funding.
Run `bundle fund` for details
run bundle binstubs bundler
rails importmap:install
/usr/local/share/gems/gems/activesupport-7.0.8.7/lib/active_support/logger_thread_safe_level.rb:12:in '<module:LoggerThreadSafeLevel>': uninitialized constant ActiveSupport::LoggerThreadSafeLevel::Logger (NameError)
Logger::Severity.constants.each do |severity|
^^^^^^
...
```
Remove a logic installing upstream rails gem which is executed if Rails RPM is
not installed. The logic is for CentOS Stream where Rails RPM may not be
installed.
However, as there is the tests/ruby repository for CentOS Stream,[1] we don't
have to manage CentOS Stream specific logic in Fedora tests/ruby repository.
[1] https://gitlab.com/redhat/centos-stream/tests/ruby
This prevents `bundle install` failures like:
~~~
:: [ 00:30:49 ] :: [ BEGIN ] :: Creating new rails application :: actually running 'rails new app | tee bundle.log'
create
create README.md
... snip ...
Fetching rails 7.0.8.6
Installing rails 7.0.8.6
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
current directory: /usr/local/share/gems/gems/psych-5.2.0/ext/psych
/usr/bin/ruby -I/usr/share/rubygems extconf.rb
checking for pkg-config for yaml-0.1... not found
checking for yaml.h... no
yaml.h not found
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.
Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include=${opt-dir}/include
--without-opt-include
--with-opt-lib=${opt-dir}/lib64
--without-opt-lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--ruby=/usr/bin/$(RUBY_BASE_NAME)
--with-libyaml-source-dir
--without-libyaml-source-dir
--with-yaml-0.1-dir
--without-yaml-0.1-dir
--with-yaml-0.1-include=${yaml-0.1-dir}/include
--without-yaml-0.1-include
--with-yaml-0.1-lib=${yaml-0.1-dir}/lib64
--without-yaml-0.1-lib
--with-yaml-0.1-config
--without-yaml-0.1-config
--with-pkg-config
--without-pkg-config
--with-libyaml-dir
--without-libyaml-dir
--with-libyaml-include=${libyaml-dir}/include
--without-libyaml-include
--with-libyaml-lib=${libyaml-dir}/lib64
--without-libyaml-lib
To see why this extension failed to compile, please check the mkmf.log which can
be found here:
/usr/local/lib64/gems/ruby/psych-5.2.0/mkmf.log
extconf failed, exit code 1
Gem files will remain installed in /usr/local/share/gems/gems/psych-5.2.0 for
inspection.
Results logged to /usr/local/lib64/gems/ruby/psych-5.2.0/gem_make.out
/usr/share/rubygems/rubygems/ext/builder.rb:125:in `run'
/usr/share/rubygems/rubygems/ext/ext_conf_builder.rb:28: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:844:in `build_extensions'
/usr/share/gems/gems/bundler-2.5.22/lib/bundler/rubygems_gem_installer.rb:109:in
`build_extensions'
/usr/share/gems/gems/bundler-2.5.22/lib/bundler/rubygems_gem_installer.rb:28:in
`install'
/usr/share/gems/gems/bundler-2.5.22/lib/bundler/source/rubygems.rb:205:in
`install'
/usr/share/gems/gems/bundler-2.5.22/lib/bundler/installer/gem_installer.rb:55:in
`install'
/usr/share/gems/gems/bundler-2.5.22/lib/bundler/installer/gem_installer.rb:17:in
`install_from_spec'
/usr/share/gems/gems/bundler-2.5.22/lib/bundler/installer/parallel_installer.rb:133:in
`do_install'
/usr/share/gems/gems/bundler-2.5.22/lib/bundler/installer/parallel_installer.rb:124:in
`block in worker_pool'
/usr/share/gems/gems/bundler-2.5.22/lib/bundler/worker.rb:62:in `apply_func'
/usr/share/gems/gems/bundler-2.5.22/lib/bundler/worker.rb:57:in `block in
process_queue'
<internal:kernel>:187:in `loop'
/usr/share/gems/gems/bundler-2.5.22/lib/bundler/worker.rb:54:in
`process_queue'
/usr/share/gems/gems/bundler-2.5.22/lib/bundler/worker.rb:90:in `block (2
levels) in create_threads'
An error occurred while installing psych (5.2.0), and Bundler cannot continue.
In Gemfile:
debug was resolved to 1.9.2, which depends on
irb was resolved to 1.14.1, which depends on
rdoc was resolved to 6.7.0, which depends on
psych
run bundle binstubs bundler
Resolving dependencies...
rails importmap:install
... snip ...
~~~
Please note that this error happens only when Fedora ships older version
of Psych then the version available on RubyGems, so the libyaml-devel
might not be always needed.
There are also other possibilities to workaround the issue, such as:
* Excluding `development` and `test` groups from installation to avoid
the `debug` gem dependency chain.
* Using `--skip-bundle` option and modifying the Gemfile generated
for the Ruby on Rails app.
However, I believe that this is the most probable action our users would
take.
Also note that while there are installed other binary gems, such as
Nokogiri, those ships prebuild binaries. If Psych decides to do the same
in the future, the `libyaml-devel` might become redundant.
systemtap-static-probes-in-ruby: for testing ruby's systemtap api
bundler-unit-tests: to run bundler's unit tests
run-basic-rails-application: a simple rails application test
Signed-off-by: Miroslav Vadkerti <mvadkert@redhat.com>