Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.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
Ruby on rails Docker上的Rails-忽略GEM,因为未构建扩展_Ruby On Rails_Docker - Fatal编程技术网

Ruby on rails Docker上的Rails-忽略GEM,因为未构建扩展

Ruby on rails Docker上的Rails-忽略GEM,因为未构建扩展,ruby-on-rails,docker,Ruby On Rails,Docker,在过去的两天里,我一直在为这个错误发疯。我正在尝试对Rails 6应用程序进行Dockerize 根据,我正在分两个阶段完成Dockerfile,以最小化生成图像的大小。一切似乎都按预期进行:在构建阶段,我将捆绑安装和纱线安装,然后将其复制到最终阶段。但是,当尝试实际启动服务器时(通过bundle exec rails),我会遇到以下错误: Could not find nokogiri-1.10.9 in any of the sources 在相关容器中运行bash时,我们可以检查bund

在过去的两天里,我一直在为这个错误发疯。我正在尝试对Rails 6应用程序进行Dockerize

根据,我正在分两个阶段完成Dockerfile,以最小化生成图像的大小。一切似乎都按预期进行:在构建阶段,我将
捆绑安装
纱线安装
,然后将其复制到最终阶段。但是,当尝试实际启动服务器时(通过
bundle exec rails
),我会遇到以下错误:

Could not find nokogiri-1.10.9 in any of the sources
在相关容器中运行bash时,我们可以检查
bundle
中它所知道的gems。但是,
bundle list
因上述错误而失败。只要运行
bundle
就可以为我们提供一个线索:

忽略bcrypt-3.1.13,因为未构建其扩展。Try:gem pristine bcrypt——版本3.1.13
忽略bootsnap-1.4.6,因为未构建其扩展。Try:gem pristine bootsnap——版本1.4.6
忽略ffi-1.12.2,因为未构建其扩展。Try:gem pristine ffi——版本1.12.2
忽略msgpack-1.3.3,因为未生成其扩展。Try:gem pristine msgpack--版本1.3.3
忽略nio4r-2.5.2,因为它的扩展没有构建。Try:gem pristine nio4r——版本2.5.2
忽略nokogiri-1.10.9,因为它的扩展未构建。试试:gem Pristite nokogiri——版本1.10.9
忽略pg-1.2.3,因为未构建其扩展。Try:gem pristine pg——版本1.2.3
忽略puma-4.3.3,因为未构建其扩展。试试看:gem pristine puma——版本4.3.3
忽略sassc-2.2.1,因为它的扩展未构建。Try:gem pristine sassc——版本2.2.1
忽略websocket-driver-0.7.1,因为未构建其扩展。Try:gem原始websocket驱动程序——版本0.7.1
在构建阶段,在
部署
选项设置为true的情况下运行
捆绑安装
,这意味着所有gem都安装在本地
供应商/捆绑
中。事实上,我们可以看到
nokogiri
和其他缺失的gem,以及它们构建的扩展,实际上都在该文件夹中:

/usr/src/app>ls-R供应商/bundle/ruby/2.6.0/extensions/x86_64-linux-musl/2.6.0/
# ...
供应商/bundle/ruby/2.6.0/extensions/x86_64-linux-musl/2.6.0/nokogiri-1.10.9:
gem.build\u complete gem\u make.out mkmf.log nokogiri
供应商/bundle/ruby/2.6.0/extensions/x86_64-linux-musl/2.6.0/nokogiri-1.10.9/nokogiri:
诺科吉里
# ...
当然,通过安装相关的构建依赖项,然后运行
bundle install
,可以在最终映像中修复该问题。在执行此操作之前,我们可以看到
nokogiri
的编译库在哪里,
bundle
找不到:

/usr/src/app>find/-name nokogiri.so
/usr/src/app/vendor/bundle/ruby/2.6.0/extensions/x86_64-linux-musl/2.6.0/nokogiri-1.10.9/nokogiri/nokogiri.so
/usr/src/app/vendor/bundle/ruby/2.6.0/gems/nokogiri-1.10.9/ext/nokogiri/nokogiri.so
/usr/src/app/vendor/bundle/ruby/2.6.0/gems/nokogiri-1.10.9/lib/nokogiri/nokogiri.so
运行
bundle install
后,
bundle
可以找到
nokogiri
很好。但它在哪里

/usr/src/app>find/-name nokogiri.so
/usr/src/app/vendor/bundle/ruby/2.6.0/extensions/x86_64-linux-musl/2.6.0/nokogiri-1.10.9/nokogiri/nokogiri.so
/usr/src/app/vendor/bundle/ruby/2.6.0/extensions/x86_64-linux/2.6.0/nokogiri-1.10.9/nokogiri/nokogiri.so
/usr/src/app/vendor/bundle/ruby/2.6.0/gems/nokogiri-1.10.9/ext/nokogiri/nokogiri.so
/usr/src/app/vendor/bundle/ruby/2.6.0/gems/nokogiri-1.10.9/lib/nokogiri/nokogiri.so
啊哈!因此,在构建阶段,我们需要构建
x86_64-linux
平台,而不是
x86_64-linux-musl
平台。问题是:我们如何做到这一点

bundle config set specific_platform x86_64-linux
我已经在构建过程中尝试设置了上述设置,但它不起作用。有什么想法吗

这篇文章足够长了:这里有一个链接到我的。如果您想亲自尝试,请确保使用
docker compose up
启动必要的psql服务器