Рейк-активы: precompile убивается, когда в производстве открывается консольный сеанс
На моем производственном сервере, который размещен на цифровом океане, если это помогает, Ubuntu 12.04, у меня есть RoR 4 и rake 10.1.1.
Когда я развертываю, я запускаю rake assets:precompile
, и я заметил странную проблему, когда, если я открываю сеанс rails console
, когда я это делаю, я получаю следующий вывод
~# rake assets:precompile
~# Killed
Это в основном раздражает, но причина, по которой я хочу, чтобы это разрешилось, - это при найме новых разработчиков, будет конфликт коллинга с развертыванием/консолью.
Спасибо,
Брайан
Ответы
Ответ 1
Ваш прекомпиляционный процесс, вероятно, будет убит, потому что у вас заканчивается RAM. Вы можете подтвердить это, запустив top
в другой сеанс ssh. Чтобы исправить это, создайте файл подкачки, который будет использоваться, когда ОЗУ будет заполнено.
Создать пространство SWAP на Ubuntu
Вероятно, вам понадобится некоторое место подкачки, если вы планируете использовать Rails на камере ОЗУ 512 МБ. В частности, вы закончите работу с ОЗУ при компиляции активов, что приведет к тихому уничтожению процесса и предотвращению успешного развертывания.
Чтобы узнать, есть ли у вас файлы подкачки:
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: Убедитесь, что swap установлен при перезагрузке. Сначала откройте fstab
sudo nano /etc/fstab
Наконец, добавьте запись в fstab (только если она не была добавлена автоматически)
# /etc/fstab
/mnt/swap_file.swap none swap sw 0 0
Сохранить и выйти. Вы закончили добавлять своп. Теперь ваш rake assets:precompile
должен завершиться без его убийства.
Ответ 2
Rake assets:precompile
- процесс хранения памяти.
Поэтому перед использованием этой команды убедитесь, что у вас достаточно ОЗУ.
Ответ 3
У меня есть стек opsworks на aws, и я бы изменил свой тип экземпляра.
Я использовал t1.micro, и я просто изменил его на t1.small
Большое спасибо.
Ответ 4
Это использует много оперативной памяти. Чтобы проверить, сколько свободного объема свободной памяти вы используете, используйте команду
free -m
Это покажет доступную оперативную память в MB
Временным решением было бы создать пространство подкачки.
Я собирался добавить это как комментарий к сообщению Jason R выше, прежде чем вы войдете в его шаги, просто чтобы убедиться, что это проблема с ресурсами ОЗУ.
вы также можете запустить
echo {1,2,3} > /proc/sys/vm/drop_caches
чтобы очистить кэш-память, но она, вероятно, не будет достаточно свободной.