I'm running dancer app with plackup: DANCER_ENVIRONMENT='development' plackup -s FCGI --port 3001 myapp.pl I'm using nginx as a web sever. Here is part of its config: server { listen 3000; location / { fastcgi_pass 127.0.0.1:3001; include /etc/nginx/fastcgi_params; } } With this configuration I can access the main page of my app, but only it. In development.log I always get: [27975] core @0.000759> request: GET / from 1.1.1.1 in /usr/share/perl5/Dancer/Handler.pm l. 49 To find out why this is so I've added 3 lines to before sub in my app: debug request->{path}; debug request->path_info(); debug request->to_string(); After restarting plackup, I access "/": [28457] core @0.000769> request: GET / from 1.1.1.1 in /usr/share/perl5/Dancer/Handler.pm l. 49 ... [28457] debug @0.035033> [hit #1]/ in /var/www/myapp/lib/myapp.pm l. 41 [28457] debug @0.035033> [hit #1]/ in /var/www/myapp/lib/myapp.pm l. 42 [28457] debug @0.038886> [hit #1][#1] GET / in /var/www/myapp/lib/myapp.pm l. 43 And here is the log when I try to access "/abc" (in the browser I still see the main page): [28457] core @0.000246> request: GET / from 1.1.1.1 in /usr/share/perl5/Dancer/Handler.pm l. 49 ... [28457] debug @0.016833> [hit #2]/abc in /var/www/myapp/lib/myapp.pm l. 41 [28457] debug @0.018028> [hit #2]/ in /var/www/myapp/lib/myapp.pm l. 42 [28457] debug @0.018363> [hit #2][#2] GET /abc in /var/www/myapp/lib/myapp.pm l. 43 I looked through the dancer code and found out that is be because $self->{env}->{'PATH_INFO'} is empty line in sub _build_path_info in the file Request.pm A dirty workaroud is to place "request->path_info(request->{path});" in before sub in the app. But this is bad because redirects do not work. So. My question is: how can I fix populating PATH_INFO in my app, running with plackup and nginx.
Utterly wild stab in the dark, since I don't deploy using fastcgi: What's in your /etc/nginx/fastcgi_params? After googling it I found people have had problems with PATH_INFO in Nginx. Perhaps this part of the Nginx wiki is applicable? http://wiki.nginx.org/HttpFcgiModule#fastcgi_split_path_info Thanks, meraxes -- dave.s.doyle@gmail.com 2011/1/26 Иван Бессарабов <ivan@bessarabov.ru>
I'm running dancer app with plackup:
DANCER_ENVIRONMENT='development' plackup -s FCGI --port 3001 myapp.pl
I'm using nginx as a web sever. Here is part of its config:
server { listen 3000; location / { fastcgi_pass 127.0.0.1:3001; include /etc/nginx/fastcgi_params; } }
With this configuration I can access the main page of my app, but only it. In development.log I always get:
[27975] core @0.000759> request: GET / from 1.1.1.1 in /usr/share/perl5/Dancer/Handler.pm l. 49
To find out why this is so I've added 3 lines to before sub in my app:
debug request->{path}; debug request->path_info(); debug request->to_string();
After restarting plackup, I access "/":
[28457] core @0.000769> request: GET / from 1.1.1.1 in /usr/share/perl5/Dancer/Handler.pm l. 49 ... [28457] debug @0.035033> [hit #1]/ in /var/www/myapp/lib/myapp.pm l. 41 [28457] debug @0.035033> [hit #1]/ in /var/www/myapp/lib/myapp.pm l. 42 [28457] debug @0.038886> [hit #1][#1] GET / in /var/www/myapp/lib/myapp.pml. 43
And here is the log when I try to access "/abc" (in the browser I still see the main page):
[28457] core @0.000246> request: GET / from 1.1.1.1 in /usr/share/perl5/Dancer/Handler.pm l. 49 ... [28457] debug @0.016833> [hit #2]/abc in /var/www/myapp/lib/myapp.pm l. 41 [28457] debug @0.018028> [hit #2]/ in /var/www/myapp/lib/myapp.pm l. 42 [28457] debug @0.018363> [hit #2][#2] GET /abc in /var/www/myapp/lib/myapp.pm l. 43
I looked through the dancer code and found out that is be because $self->{env}->{'PATH_INFO'} is empty line in sub _build_path_info in the file Request.pm
A dirty workaroud is to place "request->path_info(request->{path});" in before sub in the app. But this is bad because redirects do not work.
So. My question is: how can I fix populating PATH_INFO in my app, running with plackup and nginx. _______________________________________________ Dancer-users mailing list Dancer-users@perldancer.org http://www.backup-manager.org/cgi-bin/listinfo/dancer-users
I have the default fastcgi_params file, so its content: ********** fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; # PHP only, required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200; ********** I've read about fastcgi_split_path_info, but I don't understand what logic should I give it. I don't understan what PATH_INFO should contain. 26 января 2011 г. 9:49 пользователь Dave Doyle <dave.s.doyle@gmail.com> написал:
Utterly wild stab in the dark, since I don't deploy using fastcgi: What's in your /etc/nginx/fastcgi_params? After googling it I found people have had problems with PATH_INFO in Nginx. Perhaps this part of the Nginx wiki is applicable? http://wiki.nginx.org/HttpFcgiModule#fastcgi_split_path_info Thanks, meraxes -- dave.s.doyle@gmail.com
2011/1/26 Иван Бессарабов <ivan@bessarabov.ru>
I'm running dancer app with plackup:
DANCER_ENVIRONMENT='development' plackup -s FCGI --port 3001 myapp.pl
I'm using nginx as a web sever. Here is part of its config:
server { listen 3000; location / { fastcgi_pass 127.0.0.1:3001; include /etc/nginx/fastcgi_params; } }
With this configuration I can access the main page of my app, but only it. In development.log I always get:
[27975] core @0.000759> request: GET / from 1.1.1.1 in /usr/share/perl5/Dancer/Handler.pm l. 49
To find out why this is so I've added 3 lines to before sub in my app:
debug request->{path}; debug request->path_info(); debug request->to_string();
After restarting plackup, I access "/":
[28457] core @0.000769> request: GET / from 1.1.1.1 in /usr/share/perl5/Dancer/Handler.pm l. 49 ... [28457] debug @0.035033> [hit #1]/ in /var/www/myapp/lib/myapp.pm l. 41 [28457] debug @0.035033> [hit #1]/ in /var/www/myapp/lib/myapp.pm l. 42 [28457] debug @0.038886> [hit #1][#1] GET / in /var/www/myapp/lib/myapp.pm l. 43
And here is the log when I try to access "/abc" (in the browser I still see the main page):
[28457] core @0.000246> request: GET / from 1.1.1.1 in /usr/share/perl5/Dancer/Handler.pm l. 49 ... [28457] debug @0.016833> [hit #2]/abc in /var/www/myapp/lib/myapp.pm l. 41 [28457] debug @0.018028> [hit #2]/ in /var/www/myapp/lib/myapp.pm l. 42 [28457] debug @0.018363> [hit #2][#2] GET /abc in /var/www/myapp/lib/myapp.pm l. 43
I looked through the dancer code and found out that is be because $self->{env}->{'PATH_INFO'} is empty line in sub _build_path_info in the file Request.pm
A dirty workaroud is to place "request->path_info(request->{path});" in before sub in the app. But this is bad because redirects do not work.
So. My question is: how can I fix populating PATH_INFO in my app, running with plackup and nginx. _______________________________________________ Dancer-users mailing list Dancer-users@perldancer.org http://www.backup-manager.org/cgi-bin/listinfo/dancer-users
Le 26/01/2011 08:37, Иван Бессарабов a écrit : [...]
I've read about fastcgi_split_path_info, but I don't understand what logic should I give it. I don't understan what PATH_INFO should contain.
I think reading the PSGI spec could enlight you: http://search.cpan.org/~miyagawa/PSGI-1.03/PSGI.pod#The_Environment PATH_INFO: The remainder of the request URL's "path", designating the virtual "location" of the request's target within the application. This may be an empty string if the request URL targets the application root and does not have a trailing slash. This value should be URI decoded by servers to be compatible to RFC 3875. -- Alexis Sukrieh
Thank you. So, to make the config work I've added fastcgi_split_path_info ^()(.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; I'm not sure that this is the best solution (or even the correct solution), but it works. 2011/1/26 Alexis Sukrieh <sukria@sukria.net>:
Le 26/01/2011 08:37, Иван Бессарабов a écrit : [...]
I've read about fastcgi_split_path_info, but I don't understand what logic should I give it. I don't understan what PATH_INFO should contain.
I think reading the PSGI spec could enlight you:
http://search.cpan.org/~miyagawa/PSGI-1.03/PSGI.pod#The_Environment
PATH_INFO: The remainder of the request URL's "path", designating the virtual "location" of the request's target within the application. This may be an empty string if the request URL targets the application root and does not have a trailing slash. This value should be URI decoded by servers to be compatible to RFC 3875.
-- Alexis Sukrieh _______________________________________________ Dancer-users mailing list Dancer-users@perldancer.org http://www.backup-manager.org/cgi-bin/listinfo/dancer-users
participants (3)
-
Alexis Sukrieh -
Dave Doyle -
Иван Бессарабов