Haml & Rails 4 & dalli & fragment caching = zawsze pusty wynik

Witam,
Przy próbie użycia gdziekolwiek w widoku bloku “cache do {}” zawsze otrzymuję pusty wynik. Oto przykład użycia:

Przykładowy kod haml:

- cache "some-link" do
  %li
    = link_to("daleko", "/wp")

Pierwsze załadowanie strony w logach:

Dalli::Server#connect 127.0.0.1:11211
(...)
Cache read: views/some-link/840f84ef2e11c66f9ae54720248b6f33
Read fragment views/some-link/840f84ef2e11c66f9ae54720248b6f33 (0.4ms)
Cache write: views/some-link/840f84ef2e11c66f9ae54720248b6f33
Write fragment views/some-link/840f84ef2e11c66f9ae54720248b6f33 (1.4ms)

W konsoli:

2.0.0p353 :001 > Rails.cache.read('views/some-link/840f84ef2e11c66f9ae54720248b6f33')
Cache read: views/some-link/840f84ef2e11c66f9ae54720248b6f33
Dalli::Server#connect 127.0.0.1:11211
 => "      <li>\n        <a href=\"/wp\">daleko</a>\n      </li>\n"

Odświeżenie strony skutkuje zniknięciem zcache’owanego fragmentu w przeglądarce i komunikatem w logach:

Cache read: views/some-link/840f84ef2e11c66f9ae54720248b6f33
Read fragment views/some-link/840f84ef2e11c66f9ae54720248b6f33 (0.4ms)

Co ciekawe, kiedy ponownie czytam w konsoli cache z tym kluczem zwraca identyczny wynik (tj. nie pusty).

W plikach config/environments/production.rb & development.rb dodałem następujące linie:

config.cache_store = :dalli_store
config.action_controller.perform_caching = true

Dodatkowo:
wersja ruby: ruby 2.0.0p353 (2013-11-22 revision 43784) [x86_64-linux]
wersja rails: 4.0.3
wersja dalli: 2.7.0

Z góry dziękuje za wskazówkę, bo mi już pomysły się pokończyły :slight_smile:

dalli jest beznadziejny

Polecam:

Dzięki za szybką odpowiedź :smile:
Nie do końca czaje jak czytać te benchmarki.Nie wiem czym różni się dalli:bin od np mclient:ascii
Sugerują z podanego przez Ciebie linku, aby wykorzystać gem memcached_store
Na te benchmarki trzeba patrzeć z przymrużeniem oka, przykład:

W każdym razie dyskusja co jest lepsze nie tyczy sie tematu, a ja dalej nie mam pojecia skąd się u mnie takie cuda dzieją :smile:

Spróbuj Ruby 1.9.3, ten sam problem?

Próbowałem z Ruby 2.1.1 i ten sam problem. Do wersji 1.9.3 preferowałbym się nie cofać chociażby dlatego, ze wszystkie scope’y musiałbym przerabiać i pewnie znalazło by się po drodze mnóstwo innych rzeczy

Jeżeli chodzi ci o składnię -> {} to ruby 1.9.3 jak najbardzije ją obsługuje. Korzystanie z Ruby 2.0 jest szczerze mówiąc obarczone ryzykiem błędów, wiele gemów nie zostało przetestowanyc i/lub zaktualizowanych do nowej wersji, a używanie 2.1.1 na pewno sprawy nie rozwiąże (jeżeli to problem z kompatybilnością gema).

Spróbuj na 1.9.3 bedziesz przynajmniej miał pewność że to nie przez R2.0

Dzięki za zainteresowanie Sprawdziłem pod 1.9.3 i bez zmian. Udało mi się wykminić, że takie rzeczy tylko w haml’u. Wyrenderowałem partial’a w erb i działa tak jakbym tego oczekiwał :confused:

zamień na:

= cache "some-link" do

Już próbowałem, niestety bez powodzenia.
Może wskazówką może być to, że od jakiegoś czasu fragment znika nie od razu po odświeżeniu strony tyko po zmianie/edycji jakiegokolwiek modelu.

Że tak powiem: zdebuguj ten problem. Wstaw sobie nawet w widoku przed wywołaniem helpera ‘cache’ breakpointa (ja zwykle używam do tego pry + plugin pry-nav). Ten helper cache nie jest skomplikowany w środku. Zobacz sobie na źródła: http://apidock.com/rails/v4.0.2/ActionView/Helpers/CacheHelper/cache

Nie wiem czy będzie to pomocne: http://pastebin.com/96KWELHn
Dalej w pry’u nie znalazłem niczego adekwatnego

Dodam, że przy zmianie config.cache_store na :file_store lub :memory_store dalej to samo :confused:

Wszelkie pomysły wyczerpane ? :frowning:

Nie wiem dokładnie w czym był problem. Jakby HAML gryzł się z datatable.js. W każdym razie przejście na slim’a rozwiązało problem. THX