[Catalyst] Troubleshooting Help Please
J. Shirley
jshirley at gmail.com
Mon Oct 6 15:10:53 BST 2008
On Mon, Oct 6, 2008 at 6:47 AM, Paul Cory <pcory at wcpss.net> wrote:
> All,
>
> I've Googled repeatedly, and RTFMed, and I've reached a point where I have
> to ask for help.
>
> I have a Catalyst Web App that requires users to log in before they can do
> anything (it's a front end for managing mailing list subscriptions).
>
> This runs on Apache 1.3/mod_perl 1/perl 5.8.8/MySQL 5.0 on SLES 10. Apache,
> perl and mod_perl are compiled from source, not the distribution versions.
>
> The problem is that as the day progresses, and the application sees more and
> more use, login behavior becomes inconsistent.
>
> It starts out working flawlessly. Then, after a while, valid logins start to
> occasionally fail. Trying again gets you in - at the start. As time passes,
> the problem gets progressively worse and it eventually gets to the point
> where people quit trying because the success rate for logging in drops to
> 10% or less.
>
> By fail, I mean you go to the log in screen, put in a valid username and
> password combination, and then get seamlessly redirected to the log in
> screen, as if you had just arrived fresh to the app.
>
> Restarting Apache solves the problem, at least for a while. And then things
> begin to degrade again...
>
> I've verified that the problem is not end user error. Once you get it to
> recognize your login, the system work fine.
>
> Other Web Apps I've written, using HTML::Mason and running on this exact
> same server under mod_perl do not exhibit this behavior.
>
> I've checked the Apache error log, and I can't find any related errors.
>
> I'm using the following plug-in for authentication:
>
> Authentication
> Session
> Session::Store::FastMmap
> Session::State::Cookie
>
>
> The problem did not appear in testing, only in production.
>
> Any ideas on where to look, or what to try?
>
> FWIW, here's the login controller code (no promises on it being great -
> programming is something I've learned in self-defense). The controller
> handles log ins for both the regular and admin side of the application.
> First it checks the regular users realm, and, if that fails, then the admin
> users realm (two separate databases) .
>
>
>
> package esubscription::Controller::Login;
>
> use strict;
> use warnings;
> use base 'Catalyst::Controller';
>
>
>
> sub index : Private {
> my ( $self, $c ) = @_;
>
> # Get the username and password from form
> my $login = $c->request->params->{login} || "";
> my $password = $c->request->params->{password} || "";
>
> # If the username and password values were found in form
> if ($login && $password) {
> # Attempt to log the user in
> if ( $c->authenticate({login => $login, password => $password}) )
> {
> # If successful, then let them use the application
> $c->response->redirect($c->uri_for('/'));
> return;
> } else {
>
> if ( $c->authenticate({login => $login, password =>
> $password}, 'admin') ) {
>
> $c->response->redirect($c->uri_for('/admin/'));
> return;
>
> }
>
> else { # Set an error message
>
> $c->stash->{message} = "Bad username or password.";
> $c->stash->{login} = "$login";
> }
> }
> }
>
> # If either of above don't work out, send to the login page
> $c->stash->{template} = 'templates/forms/login_form.mas';
> }
>
>
>
> 1;
>
>
>
> Also, there's this snippet in the root controller that handles checking for
> valid user:
>
> # If a user doesn't exist, force login
>
> if (!$c->user_exists) {
>
> $c->response->redirect($c->uri_for('login'));
> # Return 0 to cancel 'post-auto' processing and prevent use
> of application
> return 0;
> }
>
>
>
> Thanks for the help!
>
>
> Paul Cory
> WCPSS Webmaster
> pcory at wcpss.net
>
>
>
Please also send your applications configuration so we can see your
auth store. I do just have to ask though... why such ancient
software? Apache 1 and MP1? Ouch.
Off the top of my head, you are running out of space on your cache dir
(how big is your tmp dir?). If you change your Session::Store or
setup for a larger cache it'd probably alleviate the problem.
-J
More information about the Catalyst
mailing list