在托管在 digital ocean 上的生产服务器上,如果有帮助的话,Ubuntu 12.04,我有RoR 4和rake 10.1.1。

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

~# rake assets:precompile
~# Killed

这主要很烦人,但是我要解决的原因是在雇用新开发人员时,将发生部署/控制台冲突的噩梦。

谢谢,

布赖恩

最佳答案

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

在Ubuntu上创建SWAP空间
如果您打算在Digital Ocean上使用512MB RAM的Droplet,可能最终需要一些交换空间。特别是,在编译 Assets 时,您将用完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应该完成而不会被杀死。

关于ruby-on-rails - rake Assets :生产中打开控制台 session 时,预编译将被杀死,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22272339/

10-16 08:31