在托管在 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/