Você já tentou compilar a asset pipeline em uma máquina Ubuntu e recebeu a mensagem abaixo?

$ bundle exec rake assets:precompile RAILS_ENV=production

rake aborted!
Errno::ENOMEM: Cannot allocate memory - node

Poisé! Isso significa que o seu servidor não possui memória suficiente para executar a operação. Mas não se desespere, pois isso tem jeito.

Provavelmente o seu servidor não está com o swap habilitado.

Eu descobri isso montando um VPS com 512Mb RAM na Digital Ocean. Com o Rails 4.0 eu conseguia compilar na boa. Ao atualizar o projeto para o Rails 4.2, o problema se revelou.

No próprio site da Digital Ocean possui um excelente tutorial ensinando como fazer.

Como eu achei bem útil a informação, vou aproveitar a oportunidade e traduzí-lo para o português.

Algumas considerações sobre a tradução

Você lerá coisas como “arquivo de swap”. Eu preferi traduzir desta maneira. Apesar de já ter ouvido outros técnicos usarem o termo “arquivo de troca”.

Você verá também a autora falando sobre Virtual Private Server ou VPS – ela está se referindo às máquinas montadas na Digital Ocean, mas nada impede de você usar essas dicas num servidor físico.

Como adicionar swap no Ubuntu 12.04 / 14.04

Sobre Linux Swapping

A RAM do Linux é composta por pedaços de memórias chamados de páginas. Para liberar páginas de RAM, um “linux swap” podemo ocorrer e uma página de memória é copiada da RAM para um espaço pré-configurado no hard disk. Linux swaps permitem um sistema disponibilizar mais memória do que estava originalmente fisicamente disponível.

No entanto, sawpping tem suas desvantagens. Porque os hard disks são muito mais lentos que a memória RAM, a performance do servidor privado virtual (aqui o autor está falando de um VPS, mas pode ser qualquer servidor) pode cair consideravelmente. Adicionalmente, limpeza de swap podem acontecer se o sistema for inundado por muitos arquivos sendo trocados e destrocados.

Verificar o espaço de Swap

Antes de procedermos com a configuração do arquivo de swap, nós precisamos nos certificar que nenhum arquivo de swap está habilitado no VPS (servidor), dando uma olhada no sumário de uso do swap.

$ sudo swapon -s

Uma lista vazia irá confirmar que você não tem arquivos de swap habilitados:

Filename				Type		Size	Used	Priority

Verificar o sistema de arquivo

Após nós sabermos que nós não temos um arquivo de swap habilitado no servidor virtual, nós podemos verificar quanto espaço nós temos on servidor com o comando df. O arquivo de swap irá ocupar 256MB – como estamos usando somente em torno de 8% do /dev/sda, nós podemos proceder.

$ df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda        20907056 1437188  18421292   8% /
udev              121588       4    121584   1% /dev
tmpfs              49752     208     49544   1% /run
none                5120       0      5120   0% /run/lock
none              124372       0    124372   0% /run/shm

Criar e habilitar the arquivo de Swap

Agora é hora de criar o arquivo de swap em si usando o comando dd:

$ sudo dd if=/dev/zero of=/swapfile bs=1024 count=256k

“of=/swapfile” designa o nome do arquivo. Neste caso o nome é swapfile.

Subsequentemente nós vamos preparar o arquivo de swap criando uma área de swap no linux:

$ sudo mkswap /swapfile

Teremos como resultado:

Setting up swapspace version 1, size = 262140 KiB
no label, UUID=103c4545-5fc5-47f3-a8b3-dfbdb64fd7eb

Finalizaremos ativando o arquivo de swap:

$ sudo swapon /swapfile

Você então será capaz de ver o novo arquivo de troca quando você visualizar o sumário de swap.

$ swapon -s
Filename				Type		Size	Used	Priority
/swapfile                               file		262140	0	-1

O arquivo permanecerá no servidor privado virtual até que a máquina seja reiniciada. Você pode se certificar que o swap será permanente adicionando-o no arquivo fstab.

Abra o arquivo:

$ sudo nano /etc/fstab

Cole a seguinte linha:

/swapfile       none    swap    sw      0       0

“Swappiness” no arquivo deve ser configurado para 10. O pulo deste passo pode resultar em uma performance pobre, ao passo que configurá-lo para 10 irá fazer o swap agir como um buffer de emergência, prevenindo crashes por falta de memória.

Você pode fazer isso com os seguintes comandos:

echo 10 | sudo tee /proc/sys/vm/swappiness
echo vm.swappiness = 10 | sudo tee -a /etc/sysctl.conf

Para prevenir o arquivo de ser “lido pelo mudo”, você deveria configurar as permissões corretas para o arquivo de swap:

sudo chown root:root /swapfile
sudo chmod 0600 /swapfile

Post original:
https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-12-04

Autor Original:
Etel Sverdlov

Traduzido por Cezinha Anjos.