Kilka dni temu podczas zmiany grafiki i silnika na przymusiala.net musiałem się zmierzyć z problemem uruchomienia starych skryptów php (blog, galeria, wiki…) wewnątrz nowej aplikacji RoR. Próbowałem wielu sposobów z symlinkami i plikami .htaccess jednak okazało się że mod_rails (Passenger) nadpisuje wszystkie dyrektywy pliku htaccess! (jest jedna instrukcja która to wyłącza jednak wtedy nic już nie działa ;) ).
Rozwiązanie problemu wygląda tak:
- Dezaktywować mod_rails
- Aktywować FastCGI
- Do pliku .htaccess wpisać:
. RewriteEngine On RewriteRule .* - [L] RewriteRule ^$ index.html [QSA] RewriteRule ^([^.]+)$ $1.html [QSA] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ dispatch.fcgi?$1 [QSA,L]
- Poprawić plik dispatch.fcgi:
require File.dirname(__FILE__) + "/../config/environment" require \'fcgi_handler\' class RailsFCGIHandler private def frao_handler(signal) dispatcher_log :info, "asked to terminate immediately" dispatcher_log :info, "frao handler working its magic!" restart_handler(signal) end alias_method :exit_now_handler, :frao_handler end RailsFCGIHandler.process!
- Jako że używam capistrano katalogi z blogiem/galerią umieściłem gdzie indziej niż samą aplikację, a tworzenie symlinków do tych skryptów wewnątrz katalogu "public" wrzuciłem do pliku config/deploy.rb
namespace(:customs) do task :symlink, :roles => :app do run >>-CMD ln -nfs /home/user/strona.com/rails/piblic/blog /home/user/strona.com/blog CMD end end after "deploy:symlink","customs:symlink"
- No i najważniejsze na koniec :), należy pamiętać by w katalogach bloga czy galerii również założyć plik .htaccess, np.:
mod_rewrite.c RewriteEngine On RewriteBase /nazwa_katalogu_danej_aplikacji_php/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /nazwa_katalogu_danej_aplikacji_php/index.php [L]
Powyższe niweluje kłopot z uruchomieniem akcji nieistniejącego kontrolera.
Dodaj komentarz!