Rake资产:在生产中打开控制台会话时,预编译会被杀死

时间:2014-03-08 17:04:32

标签: ruby-on-rails ruby digital-ocean

在我的生产服务器上,托管在数字海洋上,如果有帮助,Ubuntu 12.04,我有RoR 4和rake 10.1.1。

当我部署时,我运行rake assets:precompile,我注意到一个奇怪的问题,如果我在执行此操作时打开rails console会话,我会得到以下输出

~# rake assets:precompile
~# Killed

这主要是烦人的,但我希望它解决的原因是在招聘新的开发人员时,会出现部署/控制台冲突的噩梦。

谢谢,

布赖恩

5 个答案:

答案 0 :(得分:60)

您的预编译过程可能因为RAM耗尽而被杀死。您可以通过在另一个ssh会话中运行top来确认这一点。要解决此问题,请创建一个在RAM已满时使用的交换文件。

在Ubuntu上创建SWAP空间 如果您计划在Digital Ocean 512MB RAM Droplet上使用Rails,您可能最终需要一些交换空间。具体而言,在编译资产时,RAM将耗尽,导致进程被静静地杀死并阻止成功部署。

查看您是否有交换文件:

sudo swapon -s

没有显示交换文件?检查您有多少磁盘空间:

 df

创建交换文件:

步骤1:为交换分配文件

sudo fallocate -l 2048m /mnt/swap_file.swap

第2步:更改权限

sudo chmod 600 /mnt/swap_file.swap

步骤3:格式化文件以交换设备

sudo mkswap /mnt/swap_file.swap

步骤4:启用交换

sudo swapon /mnt/swap_file.swap

步骤5:确保重新启动时挂载交换。首先,打开fstab

sudo nano /etc/fstab

最后,在fstab中添加条目(仅当它没有自动添加时)

# /etc/fstab
/mnt/swap_file.swap none swap sw 0 0 

保存并退出。你完成了添加交换。现在你的rake assets:precompile应该完成而不会被杀死。

答案 1 :(得分:1)

Rake assets:precompile是一个记忆进食过程。

因此,在使用该命令之前,请确保您有足够的RAM

答案 2 :(得分:0)

我在aws上有一个opsworks堆栈,我想改变我的实例类型。 我正在使用t1.micro,我只是将其更改为t1.small

非常感谢。

答案 3 :(得分:0)

这使用了大量的RAM。要检查可用的RAM内存量,请使用命令

free -m

这将显示以MB为单位的可用内存

临时解决方案是创建交换空间。

在你进入他的步骤之前,我打算将此作为对Jason R帖子的评论添加,以确保它是RAM资源问题。

你也可以运行

echo {1,2,3} > /proc/sys/vm/drop_caches

清理缓存,但它可能不会释放足够的空间。

答案 4 :(得分:0)

这可能对某人有所帮助。对我来说,因为我不能使用'fallocate'命令,所以我必须这样做:

sudo dd if=/dev/zero of=/mnt/4GB.swap bs=4096 count=1048576
sudo chmod 600 /mnt/4GBB.swap
sudo mkswap /mnt/4GB.swap
sudo swapon /mnt/4GB.swap