【问题标题】:Rake assets:precompile gets killed when there is a console session open in productionRake assets:precompile 在生产中打开控制台会话时被终止
【发布时间】:2014-04-11 21:55:37
【问题描述】:

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

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

~# rake assets:precompile
~# Killed

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

谢谢,

布赖恩

【问题讨论】:

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


    【解决方案1】:

    您的预编译进程可能因为内存不足而被终止。您可以通过在另一个 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 应该会在不被杀死的情况下完成。

    【讨论】:

    • 我想我只是要买更多的电脑,谢谢你的回答,虽然这是有道理的!
    • 如果 fallocate failed: Operation not supported 然后用这个代替 sudo dd if=/dev/zero of=/mnt/swap_file.swap bs=1024 count=2097152
    • 我刚刚又遇到了这个问题,但这与 capistrano。 Cap deploy 在预编译资产时失败,并出现“无法分配内存 - /usr/local/rvm/rubies/...”的错误。上述步骤仍然有效并解决了问题。
    • 在 AWS 弹性 beanstalk t1.micro 免费套餐上部署时遇到了同样的问题。这解决了问题。
    • 这是我读过的最好的 Stack Overflow 答案之一。谢谢!确认在 2017 年 5 月 12 日开发弹性豆茎微!
    【解决方案2】:

    Rake assets:precompile 是一个消耗内存的进程。

    所以在使用该命令之前确保你有足够的内存

    【讨论】:

      【解决方案3】:

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

      非常感谢。

      【讨论】:

        【解决方案4】:

        这会占用大量内存。要检查您有多少可用 RAM 内存可用,请使用命令

        free -m

        这将以 MB 为单位显示可用 RAM

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

        在您进入他的步骤之前,我打算将此作为评论添加到上面的 Jason R 帖子中,以确保这是 RAM 资源问题。

        你也可以运行

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

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

        【讨论】:

          【解决方案5】:

          这可能对某人有所帮助。对我来说,因为我不能使用'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
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-01-25
            • 1970-01-01
            • 2012-01-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多