16

使用 capistrano 部署我的 Rails 应用程序时出现非常奇怪的错误。有时它是部署的,有时不是。例如,我在 css 中添加了一些东西(只有一个字符串),例如.my_some_class{width: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 )
4

4 回答 4

20

如上所述,您可能没有足够的 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 

如何在 Ubuntu 14.04 上添加交换 @ Digital Ocean 社区

于 2015-01-02T18:13:30.593 回答
13

如果有人有同样的错误 - 问题出在托管上。服务器没有足够ram(512mb)的,编译css/js的过程每次都被杀死。比我们更改具有 1gb ram 的速率计划,都成功部署。因此,如果您的资产预编译失败 - 只需尝试向服务器添加一些资源。PS 我在这里发现的类似问题Capistrano deploy - assets precompile error

于 2014-05-05T09:03:29.607 回答
6

尝试重新启动服务器。为我工作。

于 2015-09-05T22:27:16.337 回答
0

您的 libyaml 版本似乎已过时

更新libyaml

于 2014-04-30T14:30:08.673 回答