estou usando
# my_app.rb
load 'index.rb'
e inicie o corte assim
ruby my_app.rb
mas nunca recarrega as alterações feitas na página de índice.
Eu perdi alguma coisa aqui?
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 sejarerun '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'
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
eafter_reload
- https://github.com/sinatra/sinatra/pull/1150fonte
require "./my-file"
sem sucessorequire
não recarrega o arquivo, se já foi necessário. Emload
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 novamentesever.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
Você pode usar a
rerun
gema.OU se você estiver usando rackup
fonte
gem install sinatra-reloader
Você pode querer definir a variável de ambiente para desenvolvimento e carregar condicionalmente a gema.
fonte
Ao executar o aplicativo com o Passenger Standalone , basta criar um
tmp/always_restart
arquivo:Consulte a documentação do passageiro para obter mais informações.
fonte
Eu gosto da gema Shotgun. Se você estiver usando um aplicativo Sinatra modular e tiver um arquivo config.ru, é fácil de executar.
Verifique a joia aqui . É bastante simples e nenhuma configuração necessária.
fonte
No Windows, estou usando minha gem de reinicialização para isso:
ou, com rackup:
Veja aqui para mais informações, espero que seja útil.
fonte
Você pode usar guarda-rack. Retirado de um artigo em dblock.org :
Adicione isso ao seu Gemfile:
Em seguida, crie um
Guardfile
na raiz do seu projeto com este conteúdo:Por último, execute o Guard, assim :,
bundle exec guard
erackup
recarregará todas as vezes.fonte
Se você apenas alterar seus modelos, o sinatra sempre os renderá novamente se você definir seu ambiente para desenvolvimento:
fonte