rails 4.1 无法通过 capistrano 3 部署
Posted
技术标签:
【中文标题】rails 4.1 无法通过 capistrano 3 部署【英文标题】:rails 4.1 can't deploy via capistrano 3 【发布时间】:2014-04-30 14:04:00 【问题描述】:在使用 capistrano 部署我的 rails 应用程序时,我遇到了非常奇怪的错误。有时它是部署的,有时不是。
例如,我在 css 中添加了一些东西(只有一个字符串),例如.my_some_classwidth:10px
并且在该部署失败之后。在我添加这个之前 - 它部署好了。
我确定没有其他任何改变,因为我进行了仅包含一串 css 的实验性提交。
我的配置:
rails 4.1.0
ruby 2.1.1p76
gem 'capistrano-rails', group: :development
gem 'capistrano-rvm', group: :development
gem 'capistrano-bundler', group: :development
部署日志结束:
Tasks: TOP => deploy:assets:precompile
(See full trace by running task with --trace)
The deploy has failed with an error: #<SSHKit::Command::Failed: rake exit status: 137
rake stdout: Nothing written
rake stderr: SafeYAML Warning
----------------
You appear to have an outdated version of libyaml (0.1.4) installed on your system.
Prior to 0.1.6, libyaml is vulnerable to a heap overflow exploit from malicious YAML payloads.
For more info, see:
https://www.ruby-lang.org/en/news/2014/03/29/heap-overflow-in-yaml-uri-escape-parsing-cve-2014-2525/
The easiest thing to do right now is probably to update Psych to the latest version and enable
the 'bundled-libyaml' option, which will install a vendored libyaml with the vulnerability patched:
gem install psych -- --enable-bundled-libyaml
I, [2014-04-30T09:42:41.121037 #12193] INFO -- : Writing /var/www/default/releases/20140430134522/public/assets/Thumbs-82e32ea0cc1ce375db2805ceadd707ef.db
I, [2014-04-30T09:42:41.123108 #12193] INFO -- : Writing /var/www/default/releases/20140430134522/public/assets/agency_no_logo-a8544e60b8a38abeb431c2eb5089f7c6.png
I, [2014-04-30T09:42:41.461121 #12193] INFO -- : Writing /var/www/default/releases/20140430134522/public/assets/swipebox/img/loader-a66dde050b0b2447862919f2c4c37eda.gif
bash: line 1: 12193 Killed ( RAILS_ENV=production ~/.rvm/bin/rvm default do bundle exec rake assets:precompile )
【问题讨论】:
你跑gem install psych -- --enable-bundled-libyaml
了吗?
@BroiSatse 是的,它没有更新。我也会尝试加载 gemfile gem 'psych', '>= 2.0.5' - 没有结果
我最近在 rails 4 / cap 上看到了同样的 libyaml 错误并且一直忽略它。它没有影响部署。我最终会调查它,但还有其他问题。你的问题解决了吗?
【参考方案1】:
如上所述,您可能没有足够的 RAM。
我通过在我的 Ubuntu 14.04 服务器上添加 SWAP 文件解决了问题:
root
下:
dd if=/dev/zero of=/swapfile bs=1024 count=512k
mkswap /swapfile
swapon /swapfile
将下一行添加到/etc/fstab
:
/swapfile none swap sw 0 0
和:
echo 0 > /proc/sys/vm/swappiness
sudo chown root:root /swapfile
sudo chmod 0600 /swapfile
检查 SWAP(可能需要重新加载):
swapon -s
——How To Add Swap on Ubuntu 14.04 @ Digital Ocean Community
【讨论】:
谢谢!对我来说,正如我上面写的那样,它已经解决了,但对其他人来说可能有用!我什至将你的答案标记为正确)【参考方案2】:如果有人有同样的错误 - 问题出在主机上。服务器没有足够的ram(512mb)
,编译css/js的进程每次都被杀死。比我们更改具有 1gb ram 的速率计划,都成功部署。因此,如果您的资产预编译失败 - 只需尝试向服务器添加一些资源。
附:我在这里发现了类似的问题Capistrano deploy - assets precompile error
【讨论】:
【参考方案3】:尝试重新启动服务器。为我工作。
【讨论】:
这项工作,因为重启后你有更多的内存,而不是几天的工作。对于我自己,我很久以前就解决了这个问题,但感谢您的回答【参考方案4】:您的 libyaml 版本似乎已过时
更新libyaml
。
【讨论】:
以上是关于rails 4.1 无法通过 capistrano 3 部署的主要内容,如果未能解决你的问题,请参考以下文章
Rails 4,Capistrano 3.0.0,无法加载这样的文件——部署
如何在通过 Capistrano 部署 Rails 应用程序时输入 ssh 密钥的密码?
当通过 NVM 安装 NPM 时,Capistrano 部署失败并出现 react_on_rails
部署后缺少宝石(Ruby,Ruby on Rails,Capistrano)
/usr/bin/env ruby 没有这样的文件或目录:使用 capistrano 3、capistrano/rbenv、capistrano/bundler 和 capistrano/rail