Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“突然”;在任何来源中都找不到nokogiri-1.10.7;以前工作的GAE Ruby标准环境部署错误_Ruby_Google App Engine_Google Cloud Platform - Fatal编程技术网

“突然”;在任何来源中都找不到nokogiri-1.10.7;以前工作的GAE Ruby标准环境部署错误

“突然”;在任何来源中都找不到nokogiri-1.10.7;以前工作的GAE Ruby标准环境部署错误,ruby,google-app-engine,google-cloud-platform,Ruby,Google App Engine,Google Cloud Platform,谷歌似乎在某种程度上改变了应用程序引擎Ruby标准运行时,这让很多人的GAE部署陷入混乱,所以我在这里报告。两天前有效的部署现在在部署时失败 错误总是: Bundler::GemNotFound: Could not find nokogiri-1.10.7 in any of the sources 无论代码的本地状态如何,这种情况都会发生,而且似乎与绑定器配置、gem版本或诸如此类的内容无关。如果nokogiri在你的应用程序中,它现在就不会部署到gae ruby标准环境中 这个问题已经被

谷歌似乎在某种程度上改变了应用程序引擎Ruby标准运行时,这让很多人的GAE部署陷入混乱,所以我在这里报告。两天前有效的部署现在在部署时失败

错误总是:

Bundler::GemNotFound: Could not find nokogiri-1.10.7 in any of the sources
无论代码的本地状态如何,这种情况都会发生,而且似乎与绑定器配置、gem版本或诸如此类的内容无关。如果nokogiri在你的应用程序中,它现在就不会部署到gae ruby标准环境中


这个问题已经被报道了,但还没有得到谷歌的任何关注。

我们已经完成了根本原因调查。对于好奇的人,以下是发生的事情:

appengine标准环境的Ruby运行时用于构建/安装MRI(标准的“Matz”Ruby运行时)。10月30日,ruby在构建最新版本的MRI时进行了构建。但是,使用
--enable shared
设置构建的MRI与不使用该设置构建的MRI不兼容。这可以在加载C扩展(如Nokogiri)时体现出来。。。针对使用一个设置构建的MRI编译的C扩展将无法在使用相反设置构建的MRI中成功加载

在12月9日之前的一周,LiveRuby运行时来自10月30日之前的一个构建,因此没有使用
--enableShared
构建。然后,就在那一周,AppEngine开始推出一个新的Ruby运行时版本,该版本是使用
——enable shared
构建的。新运行时与旧运行时不兼容,因此也与现有应用程序不兼容,这些应用程序包括最初针对旧运行时编译的C扩展,从而导致所述症状

12月11日,当我们确定该版本存在问题时,我们立即将其回滚。如果有人仍然看到问题,只需重新部署应用程序就可以解决问题

为了保持与现有应用程序的兼容性,我们将禁用
——为
ruby25
运行时的所有未来更新启用共享
,并且我们已经进行了测试,以检测运行时编译标志的未来更改,以防止再次发生这种情况。请注意,这意味着
ruby25
运行时将始终在没有动态库的情况下编译。我们知道有一些gem需要动态库支持,而这些gem在
ruby25
运行时下不受支持。但是,任何即将推出的
ruby26
ruby27
,以及更高版本的Ruby运行时,都将使用
--启用共享
构建


最后,请注意,报告应用程序引擎问题的官方渠道(假设您没有GCP支持计划)是在应用程序引擎问题跟踪程序中提交问题。(您可以从中找到链接)。我们并不总是检查堆栈溢出,但问题跟踪程序直接进入谷歌的内部队列。

更新所有捆绑包内容。。。可以解决这种问题吗 在任何源错误中都找不到\uuuuuuuuuuv\uuuuuuuuuuuuu 试着跑

捆绑包更新--全部


思考可能会相应地解决所有捆绑包问题。

通过github问题传递给appengine ruby团队(他们可以很快与gae ruby标准环境团队取得联系):我负责ruby运行时,我现在正在研究这个问题。谢谢,我很感激!!!这似乎与本周推出的应用引擎Ruby运行时版本有关。在调查问题时,我们正在将其回滚;回滚应该在接下来的几个小时内完成。更新:到目前为止,它们无法复制,因此我提供了我的Gemfile.lock、Gemfile和cloud build以及GAE应用程序logsDaniel,感谢您对此的关注。我将确保在将来使用适当的问题追踪器(我不知道这些存在)。不过,我认为本期(以及我上一期)强调的一点是,在构建和运行时环境中使用不同的ruby版本有点尴尬。如果您能够进行协调,使构建和运行时始终使用相同的ruby版本,那么您可能会避免大量用户失望(事实上,还会增加GCP销售)。当前的解决方案(
ruby'~>2.5.5'
)虽然合理,但会破坏大量的GEM文件,并以一种令人恼火、不直观的方式。山姆:谢谢您的反馈。是的,有那种尴尬。这是AppEngine功能的一种暗示,它可以随时更换应用程序下的运行时层(以更新操作系统、Ruby安装、安全补丁等),而且这样做是透明的,无需重新运行构建和捆绑安装。(因此,实际上永远无法保证构建和运行时始终使用相同的Ruby版本。)ruby25运行时当前测试阶段的部分目标是确定这对于现实世界中的Ruby应用程序是否合理。我认为如果有友好的智能错误消息,这种行为就可以了。没有它是令人沮丧的,因为你最终陷入了一个循环“你的Gemfile指定了X,但你的ruby版本是Y”。可能会检测用户是否在Gemfile中绑定了特定的ruby版本,并建议使用
~>
风格的绑定。官方文件也应该提到这个imo,然后就可以了。这是个好主意。事实上,我们已经实现了这样一条错误消息(基于您之前关于堆栈溢出的报告),这是我们正在推出的功能之一,当这个C扩展问题迫使我们回滚它时。(讽刺的是令人沮丧……)无论如何,美国假期的发行版都被冻结了,但我们会在新年后再次推出。
捆绑更新nokogiri
为我解决了这个问题,