Rails 部署 Mina 时出现了问题,总提示 pg 无法继续安装

drshu · 2016年09月08日 · 最后由 drshu 回复于 2016年09月12日 · 4628 次阅读

之前听各位朋友推荐 Mina 来做部署比较方便,最近也正在尝试,但是一路上很坎坷,现在一直卡在这个问题上:
执行mina deploy之后,

-----> Creating a temporary build path
-----> Fetching new git commits
-----> Using git branch 'basic-login'
Cloning into '.'...
done.
-----> Using this git commit

Shucheng (b415511):
> update gitignore

-----> Symlinking shared paths
-----> Installing gem dependencies using Bundler
Fetching source index from https://rubygems.org/
Using rake (11.2.2) 
Using CFPropertyList (2.3.2) 
Using concurrent-ruby (1.0.2) 
Using i18n (0.7.0) 
Using minitest (5.9.0) 
Using thread_safe (0.3.5) 
Using tzinfo (1.2.2) 
Installing activesupport (5.0.0) 
Gem::InstallError: activesupport requires Ruby version >= 2.2.2.
An error occurred while installing activesupport (5.0.0), and Bundler cannot
continue.
Make sure that `gem install activesupport -v '5.0.0'` succeeds before bundling.
! ERROR: Deploy failed.
-----> Cleaning up build
Unlinking current
OK
Connection to IP closed.

 !     Command failed.
       Failed with status 1 (4864)

不知道问题到底出在哪里,服务器 Ruby 版本 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux],bundler 版本为:1.12.5,并且gem list之中是有 activesupport (5.0.0) 的,正常安装的。
已经经过了如下的尝试:重启服务器、重新执行gem install activesupport -v '5.0.0、本地重新bundle install并 push、修改服务器 gem 服务器地址均无效。求大家帮忙,谢谢!

本问题已解决

解决办法:卸载 rvm 之后,使用 brightbox 安装 ruby,详见 7 楼

新问题

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /var/www/sample_app/shared/bundle/ruby/2.3.0/gems/nokogiri-1.6.8/ext/nokogiri
/usr/bin/ruby2.3 -r ./siteconf20160909-4619-scgbpp.rb extconf.rb 
Cannot allocate memory - /usr/bin/ruby2.3 -r ./siteconf20160909-4619-scgbpp.rb extconf.rb  2>&1

Gem files will remain installed in /var/www/sample_app/tmp/build-14733503545042/vendor/bundle/ruby/2.3.0/gems/nokogiri-1.6.8 for inspection.
Results logged to /var/www/sample_app/tmp/build-14733503545042/vendor/bundle/ruby/2.3.0/extensions/x86_64-linux/2.3.0/nokogiri-1.6.8/gem_make.out
An error occurred while installing nokogiri (1.6.8), and Bundler cannot
continue.
Make sure that `gem install nokogiri -v '1.6.8'` succeeds before bundling.
! ERROR: Deploy failed.

我同样是执行了 gem install nokogiri -v '1.6.8'之后确认正确安装了,'gem list'之中已经有这个 nokogiri 了,但是仍然无法 deploy,内存占用最高只达到 50% 左右

本问题已解决

解决办法:sudo apt-get upgrade && sudo apt-get update

新问题

Fetching source index from https://gems.ruby-china.org/这一步的时候会卡很久,内存占用到 50% 左右,但是最后的错误是

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /var/www/sample_app/shared/bundle/ruby/2.3.0/gems/pg-0.18.4/ext
/usr/bin/ruby2.3 -r ./siteconf20160913-24390-122b12q.rb extconf.rb 
Cannot allocate memory - /usr/bin/ruby2.3 -r ./siteconf20160913-24390-122b12q.rb extconf.rb  2>&1

Gem files will remain installed in /var/www/sample_app/tmp/build-147374600916299/vendor/bundle/ruby/2.3.0/gems/pg-0.18.4 for inspection.
Results logged to /var/www/sample_app/tmp/build-147374600916299/vendor/bundle/ruby/2.3.0/extensions/x86_64-linux/2.3.0/pg-0.18.4/gem_make.out
An error occurred while installing pg (0.18.4), and Bundler cannot continue.
Make sure that `gem install pg -v '0.18.4'` succeeds before bundling.
! ERROR: Deploy failed.

是不是问题在 gem 之上,好头疼啊!

用 gems.ruby-china.org 试试

#1 楼 @huacnlee 不行 还是一样的结果,并且卡住了大约 1 分钟的样子 就是在 Fetching source 这里,服务器是腾讯云的,不应该会卡住这么久

服务器上面手动执行 gem install 看看详细错误

#3 楼 @huacnlee 执行gem install activesupport -v '5.0.0'吗?一切正常 没有错误,输出如下

Successfully installed activesupport-5.0.0
Parsing documentation for activesupport-5.0.0
Done installing documentation for activesupport after 3 seconds
1 gem installed

抱歉,刚才我没有仔细看,你第一段日志里面已经很明确了:

activesupport requires Ruby version >= 2.2.2.

而你在服务器上手动安装又可以,那看起来是 mina 调用的环境不对,和你 SSH 进去用的 Ruby 不是同一个。

服务器有用 RVM 么?mina 应该有 rvm 的插件。 以及要确定 mina 执行用的远程服务器账号,是不是和你手动尝试 gem install 用的是同一个。

#5 楼 @huacnlee 很奇怪啊,我都是用相同账户登录的,并且我这里看到的 RVM 里,只有一个 Ruby 版本,这个应该可以排除您说的调用问题吧?

root@VM-79-59-ubuntu:~# rvm list

rvm rubies

=* ruby-2.3.0 [ x86_64 ]

# => - current
# =* - current && default
#  * - default

其实有环境变量问题,你登录的 shell 和部署工具打开的 shell 环境不一样。

服务器不需要多版本,不用 rvm rbenv 就没这个问题了。 https://www.brightbox.com/docs/ruby/ubuntu/

#7 楼 @Rei 您的意思是卸载 rvm 然后用您给的这个方法来安装一个 2.3 的 ruby 是吗?

#9 楼 @Rei 请教一下 这个环境要如何配置,好像我又遇到了问题,按照您说的方法,我卸载了 rvm(卸载之后 ruby 已经看不到了)之后按照网页方法,重装了 ruby2.3 和 ruby2.3-dev。但是又遇到了类似问题,错误如下

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /var/www/sample_app/shared/bundle/ruby/2.3.0/gems/nokogiri-1.6.8/ext/nokogiri
/usr/bin/ruby2.3 -r ./siteconf20160909-4619-scgbpp.rb extconf.rb 
Cannot allocate memory - /usr/bin/ruby2.3 -r ./siteconf20160909-4619-scgbpp.rb extconf.rb  2>&1

Gem files will remain installed in /var/www/sample_app/tmp/build-14733503545042/vendor/bundle/ruby/2.3.0/gems/nokogiri-1.6.8 for inspection.
Results logged to /var/www/sample_app/tmp/build-14733503545042/vendor/bundle/ruby/2.3.0/extensions/x86_64-linux/2.3.0/nokogiri-1.6.8/gem_make.out
An error occurred while installing nokogiri (1.6.8), and Bundler cannot
continue.
Make sure that `gem install nokogiri -v '1.6.8'` succeeds before bundling.
! ERROR: Deploy failed.

我同样是执行了 gem install nokogiri -v '1.6.8'之后确认正确安装了,'gem list'之中已经有这个 nokogiri 了,但是仍然无法 deploy,我估计会不会是类似的原因?

#10 楼 @drshu 我觉得错误信息没贴全。

#11 楼 @Rei 这是完整的记录

-----> Creating a temporary build path
-----> Fetching new git commits
-----> Using git branch 'basic-login'
Cloning into '.'...
done.
-----> Using this git commit

bling_bling (fa92e09):
> update Gemfile

-----> Symlinking shared paths
-----> Installing gem dependencies using Bundler
Fetching source index from https://gems.ruby-china.org/
Using rake (11.2.2) 
Using CFPropertyList (2.3.2) 
Using concurrent-ruby (1.0.2) 
Using i18n (0.7.0) 
Using minitest (5.9.0) 
Using thread_safe (0.3.5) 
Using tzinfo (1.2.2) 
Using activesupport (5.0.0) 
Using builder (3.2.2) 
Using erubis (2.7.0) 
Using mini_portile2 (2.1.0) 
Using pkg-config (1.1.7) 
Installing nokogiri (1.6.8) 
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /var/www/sample_app/shared/bundle/ruby/2.3.0/gems/nokogiri-1.6.8/ext/nokogiri
/usr/bin/ruby2.3 -r ./siteconf20160909-4619-scgbpp.rb extconf.rb 
Cannot allocate memory - /usr/bin/ruby2.3 -r ./siteconf20160909-4619-scgbpp.rb extconf.rb  2>&1

Gem files will remain installed in /var/www/sample_app/tmp/build-14733503545042/vendor/bundle/ruby/2.3.0/gems/nokogiri-1.6.8 for inspection.
Results logged to /var/www/sample_app/tmp/build-14733503545042/vendor/bundle/ruby/2.3.0/extensions/x86_64-linux/2.3.0/nokogiri-1.6.8/gem_make.out
An error occurred while installing nokogiri (1.6.8), and Bundler cannot
continue.
Make sure that `gem install nokogiri -v '1.6.8'` succeeds before bundling.
! ERROR: Deploy failed.
-----> Cleaning up build
Unlinking current
OK
Connection to IP closed.

 !     Command failed.
       Failed with status 1 (4864)

其中/var/www/sample_app/tmp 路径之下的文件已经被 cleaning up 所以没有找到那个 log。

Cannot allocate memory

内存不够了,加大。

#13 楼 @Rei 啊?不会吧 1G 内存跑一个简单的项目都不够?正常只使用 15% 的内存

#14 楼 @drshu 1G 应该足够小项目编译,但是不知道你的机子还有没有跑其他进程。

如果你本地运行gem install nokogiri -v '1.6.8'成功,部署时却失败。说明两种方式运行时你的 ruby 环境是不一样的。Mina 部署时需要一个身份,这个身份可能用的还是低版本的 ruby(一般是系统自带的). 而你自己通过 rvm 安装的ruby 2.3.0, 则是你以 root 的身份安装的,并不是全局的。可以试着切换至 Mina 配置的部署者身份登录,再运行下ruby -vwhich ruby. 希望以上全是臆测。😄

17 楼 已删除

#15 楼 @Rei 这是待机时的top 麻烦帮看下

#16 楼 @suffering 谢谢回复 可能确实有一定的关系,

which ruby
/usr/bin/ruby

现在我按照 Rei 的方法没有使用 Rvm 了 但是卡在了 nokogiri 的安装上

#19 楼 @drshu 你确定你是通过 rvm 安装的?我服务器上部署者身份运行which ruby是这样的/home/xxx/.rvm/rubies/ruby-x.x.x/bin/ruby, 这样看起来才像是 rvm 的玩法吧。你运行ruby -v呢?(在部署者身份下)

#20 楼 @suffering 现在不是通过 rvm 了 而是使用的 brightbox 的方式直接安装的,请看 7 楼 部署者在我这里应该也是 root,版本是 ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux-gnu]

#15 楼 @Rei 我重新 deploy 了一次,看到最高内存值占用到不到 50%,如图

@drshu , 这样完全不知道怎么帮你了。我之前升级到macOs时,也碰到了nokogiri 1.6.8安装失败的问题,最后是通过安装了xcode 8 beta并升级了CLI之后才 OK 的。你可以试试从 cli 的角度去排查一下问题。 仔细看一下,原来我提到的可能性 @huacnlee 已经提到过啊。以后得认真看回复 😅 .

#22 楼 @suffering 这个和 client 也有关系吗?因为我是在 deploy 到服务器上的时候才出现这个问题,在 client 上是完全没有问题的。

#23 楼 @suffering 对的,我之前看到啦~但是我没有解决,是在 7 楼时,Rei 才给我了一个方法,因为现在遇到的问题和之前的已经不一样了,我重新编辑一下问题吧~谢谢你

应该没有太大关系的。我觉得你这些问题大家帮你排查了这么久都找不出原因,可能是服务器底依赖 (编译器) 或你的 mina 配置有问题。你可以考虑sudo apt-get upgrade && sudo apt-get update一下。再仔细检查一下你的 Mina 配置。如果可以的话,把配置帖出来。明天早上大神们起床了,帮你把下脉,可能就解决了。程序猿也是要睡觉的不是吗?

#25 楼 @suffering 哈哈 你说的对~早点休息吧!

#22 楼 @drshu 都占用一半内存了,这个 ruby 进程在做啥?剩下 512 内存有点捉急。

出错提示已经说明内存不足了。

1G 内存,机器上若还有其他项目跑着,真心不太够,特别是预编译静态资源的时候 不过这个也好处理,挂载一个 sawp 搞定

@drshu 话说两天了,你的问题解决了吗?解决了的话,怎么解决的?帖出来啊。你掉进的这个坑我永远也不希望踩进去。

#31 楼 @suffering 抱歉,这两天一直有事,没有解决,又出现了新的问题,现在又出现了相同情况,只是又成了其他的库,头疼。明天再尝试解决一下

之前 mina 部署的时候也遇到过环境的问题。当时用的也是 rvm 服务器上也只装了一个 2.3.0.但是 mina 一直提示找不到 bundle 也纠结了很久。 后来在 task :environment 里加了一句 invoke :'rvm:use[ruby-2.3.0-@default]' 指定了一下版本就好了。不指定版本的话 mina 好像会去调不知道哪个 ruby。 还有一种就是有次网络抽了导致一个 gem 安装失败,list 找不到,文件夹已经建了,再安装疯狂报错,你可以试试上服务器看看 ruby 版本那个 gem 的文件夹下面是不是有东西了。把那个 gem 删了重新 gem install 一下。

#33 楼 @oyaxira 谢谢回复 我的问题主要体现为能够安装成功却总是提示没有安装

需要 登录 后方可回复, 如果你还没有账号请 注册新账号