Category: Rails

Rails3, Apache + Passenger (mod Rails), send_file i pusty plik

Zauważyłem ostatnio, że send_file w Rails3 nie działa tak jak trzeba na serwerze Apache. Problem był taki, że Railsy które miały serwować plik 5MB, serwowały pusty plik.

Działo się tak tylko w środowisku produkcyjnym, więc dość ciężko było znaleźć przyczynę. Na co dzień developerkę robię na Mongrelu, pod którym wszystko działało normalnie.

Na szczęście rozwiązanie tego problemu okazało się bardzo proste. Nie na każdym serwerze można wysyłać pliki, oddelegowując je przez X-Sendfile. Wygląda na to że Rails "puszczał" nagłówek w stronę serwera, a ten po prostu go przekazywał.

Aby rozwiązać ten problem, wystarczy w pliku config/production.rb odznaczyć (zakomentować) następującą linijkę:

config.action_dispatch.x_sendfile_header = "X-Sendfile"

Po zakomentowaniu tego, Railsy będą wysyłały pliki w standardowy sposób.

Rails3 i ustawianie modułu głównego aplikacji (scope)

Przepisując część kliencką CMSa na nowe Railsy, natknąłem się na pewien problem. Jak zamapować moduł w taki sposób aby był on widoczny bez prefiksu?

Mógłbym przerzucić całość kontrolerów z modułu Site(domyślny moduł gdzie trzymam część "kliencką" CMSa) do roota, ale nie jest to zbyt dobre rozwiązanie (zaczyna się robić bałagan).

Okazało się, że nowy Routing jest w tym wypadku nader wygodny. Wystarczy skorzystać z polecenia scope i przekierować żądania w obrębie roota, do naszego modułu:

  scope :module => "site" do
    resources :jakiszasob
    resources: jakiszasob2
  end

A tak w ogóle, to polecam przeglądnięcie tego adresu: http://edgeguides.rubyonrails.org/routing.html. Znajduje się tam kompletny przewodnik do nowego routingu.

Copyright © 2026 Closer to Code

Theme by Anders NorenUp ↑