在我托管在数字海洋上的生产服务器上,如果有帮助的话,Ubuntu 12.04,我有 RoR 4 和 rake 10.1.1。
当我部署时,我运行rake assets:precompile
,我注意到一个奇怪的问题,如果我rails console
在执行此操作时打开了一个会话,我会得到以下输出
~# rake assets:precompile
~# Killed
这主要是烦人,但我想要解决它的原因是在雇用新开发人员时,会有部署/控制台冲突的噩梦。
谢谢,
布赖恩
在我托管在数字海洋上的生产服务器上,如果有帮助的话,Ubuntu 12.04,我有 RoR 4 和 rake 10.1.1。
当我部署时,我运行rake assets:precompile
,我注意到一个奇怪的问题,如果我rails console
在执行此操作时打开了一个会话,我会得到以下输出
~# rake assets:precompile
~# Killed
这主要是烦人,但我想要解决它的原因是在雇用新开发人员时,会有部署/控制台冲突的噩梦。
谢谢,
布赖恩
您的预编译过程可能被终止,因为您的 RAM 用完了。top
您可以通过在另一个 ssh 会话中运行来确认这一点。要解决此问题,请创建一个将在 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
应该在不被杀死的情况下完成。
Rake assets:precompile
是一个记忆吞噬的过程。
因此,在使用该命令之前,请确保您有足够的 RAM
我在 aws 上有一个 opsworks 堆栈,我想更改我的实例类型。我正在使用 t1.micro,我只是将其更改为 t1.small
非常感谢。
这可能会帮助某人。对我来说,因为我不能使用'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
这会占用大量 RAM。要检查您有多少可用 RAM 内存可用,请使用命令
free -m
这将以 MB 为单位显示可用 RAM
一个临时的解决方案是创建一个交换空间。
在您进入他的步骤之前,我打算将此作为评论添加到上面的 Jason R 帖子中,以确保这是一个 RAM 资源问题。
你也可以跑
echo {1,2,3} > /proc/sys/vm/drop_caches
清理缓存内存,但它可能不会释放足够的空间。