Ruby on Rails i php w jednym domu stały czyli Passenger vs. FastCGI na DreamHost.com

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.:

<IfModule 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]
</IfModule>

Powyższe niweluje kłopot z uruchomieniem akcji nieistniejącego kontrolera.

Related Articles

Leave a comment

Your comment