2011-08-02 13 views
6

Używam Ruby on Rails 3.0.9 w trybie produkcyjnym na zdalnej maszynie VPS z systemem Ubuntu 10.04 LTS (w trybie rozwoju używam RoR na MAC OS śniegu Leopard) i chciałbym wiedzieć, jak zarządzać następującym scenariuszem.Handling Paperclip folderów i plików z wykorzystaniem Ruby on Rails

używam Apache2 i Phusion pasażera i mam ustawić wirtualnego hosta jako-takiego:

<VirtualHost *:80> 
    ServerName project_name.com 
    DocumentRoot /srv/www/project_name.com/public 

    <Directory /srv/www/project_name.com/public> 
    AllowOverride all 
    Options -MultiViews 
    </Directory> 
</VirtualHost> 

Więcej używam Spinacz gem i, jak wielu ludzi na sieć używająca go w trybie produkcyjnym, pojawia się następujący błąd w obsłudze plików (obrazów):

Errno::EACCES (Permission denied - /srv/www/project_name.com/public/images/001): 
... 

Słyszałem, że rozwiązanie w celu uniknięcia tych ki nd z błędów jest ustawienie odpowiednich uprawnień do folderów (ręcznie! - Nie wiem, czy można zautomatyzować proces "ustawiania" ... BTW: czy to możliwe?), Ale myślę, że jest lepszy sposób na rozwiązanie tego problemu. Jeśli tak, co mogę \ powinienem zrobić?

Odpowiedz

2

@M. Cypher jest blisko, chociaż największym problemem, jaki widzę, jest to, że pozwalasz użytkownikom przesyłać dowolne pliki, a następnie zaznaczasz je wszystkimi plikami wykonywalnymi. To katastrofa, która szuka miejsca.

find /srv/www/project_name.com/public -type d -exec chmod 755 {}\; 
find /srv/www/project_name.com/public -type f -exec chmod 644 {}\; 

Spowoduje to ustawienie pliku wykonywalnego w katalogach (konieczne), ale nie w plikach.

1

Po co go zautomatyzować, wymaga jedynie prostej komendy na serwerze.

sudo chmod -R 777 /srv/www/project_name.com/public 

Edit: mam wszystkie moje obrazy Paperclip w udostępnionym katalogu, na przykład /srv/www/project/shared/... W ten sposób nie mają one wpływu na wdrażanie nowej wersji z Capistrano i muszę tylko raz ustawić uprawnienia do folderu (za pomocą powyższego polecenia lub podobnego). Dlatego uważam, że automatyzacja nie jest konieczna, ponieważ trzeba uruchomić polecenie dokładnie raz, a nie po każdym wdrożeniu.

Btw, chmod -R 777 może nie być najlepszym wyborem, ponieważ bezkrytycznie ustawia każdy plik w każdym podfolderze, aby był dostępny dla wszystkich. To działa, ale jestem pewien, że ktoś z większą ilością umiejętności związanych z Linuksem może wskazać, dlaczego mniej ekstremalna wersja byłaby mądrzejsza.

+1

Myślę, że 755 to lepszy wybór niż 777 – slotishtype