Search code examples
perlfastcgidancer

Can not run app using fcgi of perl Dancer


I am testing to deploy the tester example of Dancer using fcgi. But it just didn't work. I keep getting the error message:

File does not exist: /home/tester/MyApp/public/dispatch.fcgi/

However, this app can run successfully with cgi. And I have made the changes to http.conf according to dancer's deployment manual.

Can someone pointing me to some solutions or possible reasons for this error?

below is the http.conf:

<VirtualHost *:80>
    ServerName localhost

    # /srv/www.example.com is the root of your
    # dancer application
    DocumentRoot /home/tester/MyApp/public

    ServerAdmin [email protected]

    <Directory "/home/tester/MyApp/public">
       AllowOverride None
       Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
       Order allow,deny
       Allow from all
       AddHandler fastcgi-script .fcgi
    </Directory>

    ScriptAlias / /home/tester/MyApp/public/dispatch.fcgi/

    ErrorLog  /var/log/apache2/MyApp-error.log
    CustomLog /var/log/apache2/MyApp-access_log common
</VirtualHost>

Thank you


Solution

  • I don't think that ScriptAlias is what you want to be using. From the documentation...

    The ScriptAlias directive has the same behavior as the Alias directive, except that in addition it marks the target directory as containing CGI scripts that will be processed by mod_cgi's cgi-script handler.

    Basically Apache looks for a directory called '/home/tester/MyApp/public/dispatch.fcgi/' and every file in this dir is processed through mod_cgi. In this case it can't be found since it's a regular file.

    Have you tried using mod_rewrite? My httpd config for Dancer is pretty much the same as yours except I'm using mod_rewrite

    DocumentRoot /home/user/src/MyApp/public
    <Directory "/home/user/src/MyApp/public">
      AllowOverride None
      Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
      Order allow,deny
      Allow from all
      AddHandler fcgid-script .fcgi #using fcgid instead of fastcgi
    </Directory>
    
    RewriteEngine On
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /dispatch.fcgi$1 [QSA,L]