Variáveis de aplicação no RoR
Páginas: 1 2
|
|
Existe algum tipo de variáveis de aplicação no RoR? |
|
|
Já tentou ENV |
|
|
vou testar :D |
|
|
voce pode utilizar variaveis no ENV e $variaveis |
|
|
Curiosidade tola: O que tu está tentando fazer, Urubatan? |
|
|
“Tipo, uma variável que se eu alterar em uma requisição, a próxima requisição, mesmo sendo para outra instância do fcgi veja esta alteração …” Ele quer comunicação inter-processo. Talvez trabalhando com socket à nível de Ruby, mas aí depende do que você tem em mente… |
|
|
ENV é carregada uma vez por cada interpretador. |
|
|
nada de importante na verdade, estou fazendo um exemplo de chat só … No Rails isto é mais dificil de implementar por que são necessários vários processos para atender a aplicação, em java é um processo só e diversas threads :D Mas acabei usando activerecord mesmo, um model de nome OnlineUser com atributos username, session_id, online e last_seen … |
|
|
Urubatan: Nesse link[QuarkRuby] tem um trecho falando de como achar os usuários online pelas sessões mantidas no banco de dados. Talvez isso te ajude (e o artigo todo, apesar de longo é ótimo). |
|
|
o que ele faz é utilizar a session em banco de dados, da quase na mesma do que com o active record como eu implementei :D |
|
|
Urubatan, o ENV[] do rails é o equivalente ao ServletContext do JEE |
|
|
Herval, devo ter feito alguma coisa errada então, por que o que eu coloquei no ENV em um processo do fastcgi não estava acessivel a partir de outro processo do fastcgi. |
|
|
Eu acho que voce esta experienciando o que foi dito mais acima.. em modo: develoment, em cada requisicao todas as variaveis são zeradas. tenta mudar pra production… |
|
|
Cuidado, o que vocês disseram é verdade: cada processo Ruby atende uma única requisição de cada vez. Um processo Java pode atender diversas requisições simultâneas porque internamente ele suporta multi-threading e o container servlet é, por definição, thread-safe. Logo, manter objetos globais no nível do classloader local é possível. Em Ruby isso não é possível porque em produção rodamos vários processos em paralelo na mesma máquina, logo uma variável que muda num processo é invisível para o outro. Isso não é uma desvantagem: ao guardar informações localmente como “variáveis globais” você acabou de limitar severamente a escalabilidade do seu aplicativo. Amanhã sua audiência cresce, você resolve colocar mais funcionalidades, etc e precisa de mais processamento. Bom, vamos colocar outra máquina: mas agora você não pode mais porque seu aplicativo é dependente do único processo onde ele roda. É preferível serializar esses dados ou num banco de dados ou num file system. File system pode ainda dar problema de concorrência (duas requisições querendo gravar no mesmo arquivo ao mesmo tempo), mas ainda é menos ruim do que gravar em memória. Lembrem-se: shared-nothing architecture. É assim que se escala na Internet. |
|
|
Akita, concordo que quando menos variáveis compartilhadas mais escalavel a aplicação, mas todas as soluções de cluster java compartilham também os escopos de sessão e aplicação entre os nõs do cluster (claro que utiliza banda de rede para isto, mas isto raramente é um gargalo, a não ser quando alguns programadores meia boca que eu ja conheci, resolveram que podiam armazenar conteúdo de um PDF inteiro na sessão multiplicando por milhares de usuários ferrou a escalabilidade e o trafego de rede entre os servidores do cluster que tinham que sincronizar esta tralha toda :D Mas concordo que é possível utilizar bancos de dados para isto, e foi o que eu fiz no exemplo de chat que eu estava fazendo. http://www.urubatan.com.br/um-exemplo-de-chat-com-ruby-on-rails-e-juggernaut-utilizando-ajax-push/ |
|
|
Ura, Veja esse exemplo prático de como usar o ENV. Eu no caso o utilizo para “debug”: |
|
|
Isso me fez lembrar "desse post aqui ‘Chat em Ruby???’ ":http://forum.rubyonbr.org/forums/1/topics/1075 Só um off: Vocês sabiam que dá pra apontar uma thread, um fork ou IO no Rails via variáveis $globais ?!? Como diria Ronie “Sempre há mais de uma maneira de esfolar o gato :)” |
|
|
Grinvon, |
|
|
Você quer uma variável global a nível de contexto ou a nível de aplicação? Você quer trabalhar com variáveis globais? |
|
|
sim eu quero traalhar com variáveis globais a níbel de aplicação, uma variável global na verdade, a lista de usuários online do chat. |
|
|
Essa é a forma correta mesmo, qualquer informação que precise ser compartilhada para múltiplos usuários SEMPRE deve ir em banco. Não existem variáveis globais entre multiplos processos de Ruby (e nem de nenhuma outra linguagem dinamica que dependa de múltiplos processos) e nem deveria haver mesmo porque o comportamento pode se tornar errático e imprevisível. |
|
|
tenho o meu projecto com development, como faço para alterá-lo para production de um modo fácil e rápido??? |
|
|
ninguém sabe? =/ |
|
|
script/server -e production ou dentro da aplicação |
|
|
Ou muda a variável RAILS_ENV para production no seu environment.rb |
Páginas: 1 2

