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

drshu · 发布于 2016年09月08日 · 最后由 drshu 回复于 2016年09月12日 · 1404 次阅读
27555

之前听各位朋友推荐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之上,好头疼啊!

共收到 33 条回复
De6df3

用 gems.ruby-china.org 试试

27555

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

De6df3

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

27555

#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

De6df3

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

activesupport requires Ruby version >= 2.2.2.

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

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

27555

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

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

rvm rubies

=* ruby-2.3.0 [ x86_64 ]

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

1

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

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

27555

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

27555

#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,我估计会不会是类似的原因?

1

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

27555

#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。

1

Cannot allocate memory

内存不够了,加大。

27555

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

1

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

709

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

17楼 已删除
27555

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

27555

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

which ruby
/usr/bin/ruby

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

709

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

27555

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

27555

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

709

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

27555

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

27555

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

709

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

27555

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

1

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

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

3035

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

709

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

27555

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

28362

之前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一下。

27555

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

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