rails资产管道“无法分配内存 - nodejs”

时间:2012-06-13 11:19:21

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2 asset-pipeline

我们刚刚从Rails 3.0.7升级到Rails 3.2.5,并为登台服务器动态使用资产管道编译,但有时我们会遇到这种异常!

Showing /var/rails/appname/app/views/common/_my_partial.html.haml where line # raised:

Cannot allocate memory - nodejs /tmp/execjs20120613-17090-thoc8f.js 2>&1

Extracted source (around line #):

Trace of template inclusion: app/views/layouts/application.html.haml

虽然在coffeescripts或images文件夹中没有做任何花哨或大量的内存分配!

...谢谢

5 个答案:

答案 0 :(得分:81)

花三分钟(如果你快速输入可能是两分钟)很简单,就可以在你的服务器上添加一个交换文件。

如果您正在运行Ubuntu(不确定这对其他Linux版本有多好),请按照DigitalOcean的本教程进行操作:

https://www.digitalocean.com/community/articles/how-to-add-swap-on-ubuntu-12-04

瞧!

答案 1 :(得分:11)

基于Kyle Carlson

提供的教程链接

检查交换空间

sudo swapon -s

空列表将确认您没有启用交换文件:

Filename Type Size Used Priority

创建并启用交换文件(交换文件)

sudo dd if=/dev/zero of=/swapfile bs=1024 count=256k

创建一个linux交换区:

sudo mkswap /swapfile

输出:

Setting up swapspace version 1, size = 262140 KiB no label, UUID=103c4545-5fc5-47f3-a8b3-dfbdb64fd7eb

激活交换文件:

sudo swapon /swapfile

检查您是否可以看到交换摘要。

swapon -s

Filename                Type        Size    Used    Priority
/swapfile                               file        262140  0   -1

完成!

制作交换文件永久性

sudo nano /etc/fstab

粘贴在以下行:

/swapfile none swap sw 0 0

文件中的Swappiness应设置为10.跳过此步骤可能会导致性能不佳,而将其设置为10将导致交换充当紧急缓冲区,从而防止内存不足崩溃。

echo 10 | sudo tee /proc/sys/vm/swappiness
echo vm.swappiness = 10 | sudo tee -a /etc/sysctl.conf

在交换文件上设置正确的权限,使公众无法读取:

sudo chown root:root /swapfile 
sudo chmod 0600 /swapfile

答案 2 :(得分:8)

根据@ tohi的回答,我创建了一个可以粘贴到终端的脚本。

# Turn it (off) on
# sudo swapoff -a
sudo swapon -s

# Create a swap file
# 512k --> Swapfile of 512 MB
sudo dd if=/dev/zero of=/swapfile bs=1024 count=512k

# Use the swap file
sudo mkswap /swapfile
sudo swapon /swapfile

# make sure the swap is present after reboot:
sudo echo " /swapfile       none    swap    sw      0       0 " >> /etc/fstab

# Set the swappiness (performance - aware)
echo 10 | sudo tee /proc/sys/vm/swappiness
echo vm.swappiness = 10 | sudo tee -a /etc/sysctl.conf           

# Change the permission to non-world-readable
sudo chown root:root /swapfile 
sudo chmod 0600 /swapfile

更新:如果您稍后需要调整/swapfile的大小,请查看以下答案:https://askubuntu.com/a/763717/508371

答案 3 :(得分:1)

我们联系了提供商的支持,他们回复了2条消息:

  1. 有两件事可能导致这种情况:您确实经常耗尽内存您的Webby没有配置交换
  2. 我们有一个系统管理员检查它,我们很快就会回复您的机票。

    1. 您的交换由于某种原因被禁用,这就是您遇到内存问题的原因。 我修复了fstab条目,并在右侧分区上启用交换。 你现在应该没事。
    2. 直到现在这个错误没有显示:)希望它不会继续显示未来......

      谢谢,最好是运气......

答案 4 :(得分:0)

也许有助于:

RAILS_ENV=production rake assets:clean

重新启动您的网络服务器/例如

service apache2 restart

然后:

RAILS_ENV=production rake assets:precompile