O Linode parece requerer a reinicialização antes que as alterações no código RoR sejam exibidas

1

Eu herdei um projeto de um desenvolvedor com quem não posso mais entrar em contato. É um projeto Ruby on Rails hospedado no Linode com o SVN como o vcs.

Eu posso SFTP no servidor e alterar arquivos, mas as mudanças não aparecem no site até que eu ssh e reinicie o servidor. Estas não são alterações nos arquivos de configuração, apenas alterações simples em algumas views de erb.html.

Na minha experiência anterior usando o git com o Linode, eu apenas empurrei e as mudanças apareceriam ao vivo. Talvez o antigo desenvolvedor tenha criado algo com um gancho de svn?

    
por LennonR 20.02.2012 / 22:42

2 respostas

1

Posso pensar em duas possibilidades que poderiam estar causando isso:

  1. Cache . Se você estava usando PHP, então eu diria que isso era APC com a configuração stat alterada para Off . Não sendo familiar o suficiente com Ruby, só posso imaginar que há um cache OpCode embutido e que reiniciar o servidor inteiro libera o cache. Você pode ser capaz de sair apenas reiniciando o daemon HTTP.
  2. Script de inicialização . Pode haver um script de inicialização que executa uma verificação do repositório do subversion ou, possivelmente, uma cópia direta de um diretório para outro. Isso também pode fazer parte de um script existente, como aquele que inicia seu daemon HTTP. Novamente, encontrar o script e executá-lo pode poupar o trabalho de reinicializar todo o servidor.

Um gancho de post-commit do SVN certamente poderia ser usado para fazer o que estiver sendo feito aqui, até mesmo para reinicializar o servidor, mas eu teria cuidado com isso. Implantar código em um servidor de produção é algo em que você deve ter uma certa quantidade de controle e deve ser separado do processo de desenvolvimento. A ideia de um desenvolvedor cometer algo e tê-lo implantado automaticamente e instantaneamente me dá um susto.

    
por 20.02.2012 / 23:27
1

Você não precisa realmente reiniciar o servidor, especialmente com um projeto Rails. Na pior das hipóteses, você pode querer recarregar o Apache / Nginx / Webserver de sua escolha, mas, na verdade, você pode simplesmente reiniciar seu projeto internamente.

Você pode fazer uma de duas coisas. Assumindo que o seu projeto está sendo atendido pelo Phusion Passenger, você pode adicionar um hook de commit ao seu repositório no servidor para recarregar o aplicativo ...

cd /wherever/your/svn/repository/is/hooks
touch post-commit
chmod 755 post-commit

e depois

#!/bin/sh
#post-commit hook. This will force Phusion to reload your RoR project
echo "Some message. Just letting you know I'm doing my job"
/bin/touch /wherever/your/project/is/tmp/restart.txt

Ou recarregue o servidor web (você precisa ter certeza de ter direitos sudo-without-password, senão isso irá falhar. Isso também forçará uma atualização mesmo se você não estiver usando o Phusion)

#!/bin/sh
#post-commit hook. This will reload the webserver, forcing everything to reload.
echo "Some message. Just letting you know I'm doing my job"
sudo /sbin/service whatever-your-webserver-init-is reload

E ei, pronto. Seu projeto agora é recarregado quando você se compromete, e você deve poder ver suas alterações imediatamente * (depois de recarregar a página).

* esses ganchos são para o SVN. Eles podem trabalhar em Git, quem sabe até que você tente. Alguém pode querer verificar se eu entendi errado

    
por 20.02.2012 / 23:39