Szukam sposobu na to aby klasa byla przeladowywana per request anie tak jak to jest w production per process restart. Ma ktos jakies pomysly dlaczego to nie dziala ? 1 wywolanie “#{Time.now}” drugie i kazde nastepne “defined:#{Time.now}”. Czy aby napewno reloadable dziala ? a moze robie cos nie tak ? Wie ktos w jaki sposob moglbym przechowywac globalnie pewne zmienne tylko dla konkretnego requestu ?
class ReloadableTest
include Reloadable
def self.isReloaded
if not defined? @@instance
@@instance = Time.now
@@instance
else
"defined:#{@@instance}"
end
end
end
Jak rozumiem Reloadable ustawia reloadable? na true i dzieki temu klasa per request powinna byc odswiezana, wyglada na to ze nie jest
Reloadable zawsze działało tylko w trybie development.
W Rails 1.2 Reloadable zostało wycofane, bo wszystkie automatycznie ładowane klasy są również automatycznie przeładowywane.
Warto podkreślić, że odświeżanie dotyczy to tylko klas, których można używać bez require. Odświeżenie nie zadziała np. dla klasy umieszczonej w lib/katalog/plik.rb
Dlaczego chciałbyś? Czy chodzi o zalogowanego użytkownika? Można zastosować taki patent:
[code=ruby]class User < ActiveRecord::Base
cattr_accessor :current_user
end
class ApplicationController < ApplicationController::Base
before_filter :set_user
after_filter :clear_user
private
def set_user
User.current_user= session[:user]
end
def clear_user
User.current_user= nil
end
end[/code]
To działa, bo Rails jest jednowątkowe. Każdy proces w danej chwili obsługuje tylko jedno żądanie, więc nie ma obawy o mieszanie w globalnym stanie aplikacji.
Nie potrzebuje tego w zupelnie innym miejscu, mam model ktory operuje na tabeli id, name, parent_id tabela ma okolo 60 elementow, w calosci tworza drzewo, kazdy element ma api zblizone do DOM i wlasnie musze cachowac “pobieranie t9ych 60 elementow z bazy” korzystajac z @elements na poziomie def self.method_name @elements staje sie globalne dla calego procesu, szukam sposobu na odswiezanie @elements per request.
Jesli tak faktycznie jest to swietnie, mam szanse osiagnac to czego chcialem wystarczy ze stworze nowa metode ktora bedzi9e “zerowala” elementy i wywolam ja w “before_filter”
Jesli tak faktycznie jest to swietnie[/quote]
W tym wypadku tak, ale moim zdaniem to jest jeden z minusów railsów. Wydajność spada i nawet dla bardzo małych aplikacji przydają się 2 mongrele. No i ciężko przez to zaimplementować upload progress.