如何使用Ruby预览版与Bundler并继续部署到Heroku

csbfibhn  于 12个月前  发布在  Ruby
关注(0)|答案(1)|浏览(84)

在一个使用Replayer和Heroku的项目中,我想测试ruby-3.3.0-preview 1版本,我可以让Replayer在本地使用预览版,但不能将其部署到Heroku,并且Heroku文档中的说明在本地不起作用。
我可以安装ruby版本(我使用rbenv),并将.ruby-version文件的版本设置为3.3.0-preview1(或者如果我愿意,我可以使用rbenv-alias插件将其称为3.3.0,但这也不能解决问题)。
我可以在Gemfile中使用预览版本,方法是指定一个不同但相似的名称:

ruby '3.3.0preview1'

它按预期工作,在本地安装新版本中的所有gem,并且可以在应用程序中确认RUBY_VERSION为3.3.0。
但是,Heroku不接受这个版本,它引发了错误:

The Ruby version you are trying to install does not exist: ruby-3.3.0.preview1

Heroku documentation建议将3.3.0放在Gemfile中,但这实际上也不起作用,因为如果我只使用3.3.0,则编译器不会在本地运行,它说:

Your Ruby version is 3.3.0.preview1, but your Gemfile specified 3.3.0

观察结果:我还尝试在Gemfile中指定preview 1作为补丁级别,但这也不起作用:

ruby '3.3.0', patchlevel: 'preview1'

**[更新]**作为参考,我在heroku-buildpack仓库中创建了一个问题,因为这似乎是一个bug:

https://github.com/heroku/heroku-buildpack-ruby/issues/1387

wixjitnu

wixjitnu1#

在调试OP提到的问题时,这个答案更像是一个检查表,所以我把这个留给未来的读者(包括我自己)作为注解。

首先

您可能需要更改您的Heroku堆栈。
你也可以去

heroku stack

确认你使用的是最新的版本(heroku-22),通常,它支持较新的Ruby版本,并且它说在3.3.0-preview1的Gemfile中使用3.3.0。
如果它不是heroku-22,则需要将其设置为:

heroku stack:set heroku-22

请注意,升级到最新堆栈有其flow and some implications
3.3.0-preview1May, 12th以来一直可用
一个类似的问题和一些关于SO的答案:

我注意到错误消息引用:ruby-3.3.0.preview1,这里有.preview1是奇数。这可能是一个错字,你应该有ruby 3.3.0-preview1在你的Gemfile引用?

此链接可能有助于指定Ruby版本,因为Gemfile和Gemfile. lock之间可能存在问题。
第四
Buildpack恶作剧。正如其中一条评论所述,Heroku更新了Ruby构建包,在Gemfile中使用ruby "3.3.0"来检查preview1。也可以像这样将buildpack锁定到特定版本:

heroku buildpacks:set https://github.com/heroku/heroku-buildpack-ruby.git#v254

最新版本是v256,但3.3.0-preview1版本包含在v254中。检查/选择构建包的不同版本可能会很有用。

相关问题