Rails似乎一般不宣传Ruby版本的兼容性,但我相信Rails 6.1似乎可以与Ruby 3.1一起使用--只要你在Gemfile中手动添加三个依赖项。
gem "net-imap"
gem "net-pop"
gem "net-smtp"
(这里有一个(我认为)有背景的Rails提交者提供的有点神秘的要点。虽然它没有具体明确地告诉你要为Rails 6.1和ruby 3.1添加这些依赖项......但除非你这样做,否则它不会工作。你可以在网上找到关于这个问题的其他讨论)。
或者你可以在你的 Gemfile 中添加一行,选择使用预发布的mail gem 2.8.0.rc1,它包括这些依赖,以兼容 ruby 3.1。Mail 已经是一个 Rails 的依赖;但是预发布的 gem(其版本号以包括第三个句号后的字母在内的东西结尾)不会被 bundler 包含,除非你在 Gemfile 中明确提到一个预发布版本(其版本号以...结尾)。
gem "mail", ">= 2.8.0.rc1"
一旦邮件2.8.0 final 发布,如果我的理解是对的,你就不需要做这些了,因为它不是预发布版本,bundler 会在bundle updateing 一个 Rails 应用时使用它,它表达了你对 ruby 3.1 所需的依赖,而 Rails 6.1 将会与 ruby 3.1 一起工作。吁!我希望它能尽快发布。我希望它能尽快发布(距离2.8.0.rc1已经有7个星期了)。
引擎购物车
Engine_cart是一个在运行时动态创建Rails应用的 gem,用于CI构建系统,主要用于测试Rails引擎 gem。它在我参与的一些合作性开源社区中被使用。虽然它有优点(实际上是集成测试真正的应用生成)和缺点(事实证明是一种维护噩梦),但我一般不推荐它,如果你以前没有听说过它,并且想知道 "jrochkind认为我应该用它来测试一般的引擎宝石吗?" - 这不是一种认可。一般来说,它可以增加很多痛苦。
但它在我有时帮助维护的一些项目中被使用。
你如何让使用 engine_cart 的构建在 Rails 6.1 和 ruby 3.1 下成功测试? 因为如果是 "手动 "的话,你就必须在Gemfile中添加一行......
事实证明,你可以创建一个./spec/test_app_templates/Gemfile.extra 文件,其中包括必要的额外的gem 调用。
gem "net-imap"
gem "net-pop"
gem "net-smtp"
# OR, above OR below, don't need both
gem "mail", ">= 2.8.0.rc1"
- 我认为
./spec/test_app_templates/Gemfile.extra是一个由engine_cart使用的 "神奇路径"......或者如果我正在工作的应用程序正在设置它,我无法弄清楚为什么/如何设置的但我也不太明白为什么/如果engine_cart默认为它...... - 把这个添加到你的主项目
Gemfile是不够的,它需要在Gemfile.extra - 我看到有些项目在他们的Gemfile里有一行使用
eval_gemfile,并引用Gemfile.extra......我不太明白......而且对我来说似乎没有必要......我想也许这是过去版本的engine_cart最佳实践留下的? - 说实话,我真的不明白
Gemfile.extra是如何/从哪里来的,我也没有在 engine_cart 中找到任何关于它的文档。所以,如果这对你不起作用......你可能只是没有正确配置engine_cart以使用该位置的Gemfile.extra,我正在做的项目以某种方式做到了这一点?
请注意,在生成测试应用程序的某个阶段,你可能仍然会在构建输出中得到一个错误产生。
run bundle binstubs bundler
rails webpacker:install
You don't have net-smtp installed in your application. Please add it to your Gemfile and run bundle install
rails aborted!
LoadError: cannot load such file -- net/smtp
但无论如何,它似乎都会继续下去并工作!
当mail 2.8.0 final发布时,这些都不应该是必要的,它应该只是工作!
当然,上述情况总是包括那些额外的依赖,用于你的矩阵中的所有构建,而它们只对Rails 6.1(不是7!)和ruby 3.1有必要。如果你想保护它只适用于该版本,并且你的应用程序使用RAILS_VERSION 环境变量约定,这似乎是可行的。
# ./specs/test_app_templates/Gemfile.extra
#
# Only necessary until mail 2.8.0 is released, allow us to build with engine_cart
# under Rails 6.1 and ruby 3.1, by opting into using pre-release version of mail
# 2.8.0.rc1
#
# https://github.com/mikel/mail/pull/1472
if ENV['RAILS_VERSION'] && ENV['RAILS_VERSION'] =~ /^6\.1\./ && RUBY_VERSION =~ /^3\.1\./
gem "mail", ">= 2.8.0.rc1"
end