Respostas:
Veja o Sinatra FAQ ,
"Como faço para recarregar meu aplicativo Sinatra com as alterações?"
Em primeiro lugar, recarregar o código em processo em Ruby é difícil e ter uma solução que funcione para todos os cenários é tecnicamente impossível.
É por isso que recomendamos que você faça o recarregamento fora do processo.
Primeiro você precisa instalar a nova execução, caso ainda não tenha:
$ gem install rerun
Agora, se você iniciar seu aplicativo Sinatra assim:
$ ruby app.rb
Tudo que você precisa fazer para recarregar é, em vez disso:
$ rerun 'ruby app.rb'
Se você estiver, por exemplo, usando rackup, faça o seguinte:
$ rerun 'rackup'
Você entendeu a ideia.
Se você ainda deseja recarregar durante o processo, verifique
Sinatra::Reloader
.
rerun
. Você não está limitado às opções padrão, ou seja rerun 'rackup'
. É possível executar qualquer servidor em qualquer porta. Aqui está um exemplo de como executar o Puma na porta número 5678 -rerun 'rackup -s puma -p 5678 app/sinatra/config.ru'
gem install sinatra-reloader
require 'sinatra'
require 'sinatra/reloader'
Nota : ele irá recarregar apenas os manipuladores do sinatra (e, talvez alguns comandos de configuração do servidor do sinatra), mas não os arquivos personalizados, que você tem que recarregar manualmente.
UPD após 9 anos: parece que já é possível recarregar outros arquivos usando also_reload
, dont_reload
e after_reload
- https://github.com/sinatra/sinatra/pull/1150
require "./my-file"
sem sucesso
require
não recarrega o arquivo, se já foi necessário. Em load
vez disso.
server.rb
, no entanto, para que ele recarregue meu arquivo externo. Ele não verifica meu arquivo externo sozinho, então tenho que salvá-lo novamente sever.rb
toda vez que faço uma alteração em meu arquivo externo. O shotgun parece funcionar melhor nesse aspecto, mas também parece recarregar as sessões do banco de dados.
configure :development do |c| require 'sinatra/reloader' c.also_reload "./lib/*.rb" c.also_reload "./controllers/*.rb" c.also_reload "./init/*.rb" end
Ao executar o aplicativo com o Passenger Standalone , basta criar um tmp/always_restart
arquivo:
$ touch tmp/always_restart.txt
Consulte a documentação do passageiro para obter mais informações.
Eu gosto da gema Shotgun. Se você estiver usando um aplicativo Sinatra modular e tiver um arquivo config.ru, é fácil de executar.
shotgun config.ru
Verifique a joia aqui . É bastante simples e nenhuma configuração necessária.
No Windows, estou usando minha gem de reinicialização para isso:
restart ruby my_app.rb
ou, com rackup:
restart rackup
Veja aqui para mais informações, espero que seja útil.
Você pode usar guarda-rack. Retirado de um artigo em dblock.org :
Adicione isso ao seu Gemfile:
group :development do
gem "guard"
gem "guard-bundler"
gem "guard-rack"
end
Em seguida, crie um Guardfile
na raiz do seu projeto com este conteúdo:
guard 'bundler' do
watch('Gemfile')
end
guard 'rack' do
watch('Gemfile.lock')
watch(%r{^(config|app|api)/.*})
end
Por último, execute o Guard, assim :, bundle exec guard
e rackup
recarregará todas as vezes.