Re: require'ing data files under mod_perl

2003-07-07 Thread Peter Ensch
On Thu, Jul 03, 2003 at 05:15:31PM -0400, Perrin Harkins wrote:
 On Thu, 2003-07-03 at 16:59, Peter Ensch wrote:
  OK. Thanks. Well, yes it is being reloaded whenever the form
  is submitted and w/out restarting the server. Here's some of 
  the output (error_log):
  
  [Thu Jul  3 15:52:00 2003] users.dat: users.dat loaded by process 18294 at 
  /opt/a...
 
 

 Just a guess, but maybe this is because you're passing a variable to the
 require function.  Try hard-coding it and see if it changes.
 

This sounded like a good explanation but it wasn't. Hard-coding the 
require'd file didn't make any difference; nor did the assignment to
a variable. In each case the require'd file was reloaded each time
the script was invoked.

It's a mystery!

P

-- 

^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^
Peter Ensch,
[EMAIL PROTECTED]   A-1140   (214) 480 2333
^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^


Re: require'ing data files under mod_perl

2003-07-03 Thread Peter Ensch
On Mon, Jun 30, 2003 at 05:28:43PM -0400, Perrin Harkins wrote:
 On Sat, 2003-06-28 at 15:08, Peter B. Ensch wrote:
  Coding in plain CGI I've often require'd files containing
  data in perl data-structures. The script may write to the 
  file (via Data::Dumper for example) allowing subsequent 
  invokations of the script to have access to the revised
  data.
 
 It would be simpler and faster to use MLDBM::Sync for this.
 

Not familiar w/ this module and it's not on our system; I'll
certainly look into it.

  I was expecting this methodology to break under mod_perl
  thinking that the require would only happen once (the
  first time the script runs after server startup); however,
  it seems to be working the way it always did.
  
  Why is this? Am I missing something?
 
 Can't tell without seeing some code.  Your require'd files with not be
 reloaded unless you are using Apache::Reload or Apache::StatINC to force
 them.
 

I'm NOT using A::Reload or A::StatINC. My script appears to be
require'ing the data file on each user transaction, just like
under plain CGI. 

I'm using CGI::Application and this part of the code happens inside
the cgiapp_init() method which I'm overriding:

our $USERS : unique = /path/to/users.dat;

sub cgiapp_init {
 my $self = shift;
 $self-param('users' = require ${\$USERS});
}

So, to reiterate, I may write to users.dat on one transaction
and read on another; the file contents is always up-to-date.
I still can't understand why this is because I did not think
it would be reloaded unless the server was restarted.

BTW - it doesn't have anything to do with the 'unique' our
attribute; same behavour with or without. 

I'm new to apache and I'm not running in single-process mode; 
this shouldn't have a bearing should it?

Thanks,
P

-- 

^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^
Peter Ensch,
[EMAIL PROTECTED]   A-1140   (214) 480 2333
^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^


Re: require'ing data files under mod_perl

2003-07-03 Thread Perrin Harkins
On Thu, 2003-07-03 at 13:38, Peter Ensch wrote:
 I'm using CGI::Application and this part of the code happens inside
 the cgiapp_init() method which I'm overriding:
 
 our $USERS : unique = /path/to/users.dat;
 
 sub cgiapp_init {
  my $self = shift;
  $self-param('users' = require ${\$USERS});
 }

That's confusing code.  Your users.dat file is a chunk of code that
returns a value that you use?  A little obscure, in my opinion.  And
what's that stuff with the ref/de-ref syntax for?

 So, to reiterate, I may write to users.dat on one transaction
 and read on another; the file contents is always up-to-date.

The file is up-to-date, or the param 'users' is?

Why don't you debug it a little by putting a warn statement in your
users.dat file that prints the process ID?  Then you can tell if it is
truly being executed more than once by the same process.

- Perrin


Re: require'ing data files under mod_perl

2003-07-03 Thread Peter Ensch
On Thu, Jul 03, 2003 at 02:51:23PM -0400, Perrin Harkins wrote:
 On Thu, 2003-07-03 at 13:38, Peter Ensch wrote:
  I'm using CGI::Application and this part of the code happens inside
  the cgiapp_init() method which I'm overriding:
  
  our $USERS : unique = /path/to/users.dat;
  
  sub cgiapp_init {
   my $self = shift;
   $self-param('users' = require ${\$USERS});
  }
 
 That's confusing code.  Your users.dat file is a chunk of code that
 returns a value that you use?  A little obscure, in my opinion.  And
 what's that stuff with the ref/de-ref syntax for?

The file contains a simple hash ref. like
{
  duck = 'quack',
  dog  = 'woof',
  cat  = 'meow',
}

The ref/de-ref was a mistake; a hold over from when USERS was a 
constant (and which didn't interpolate in a require). Now it's 
  $self-param('users' = require $USERS);

 
  So, to reiterate, I may write to users.dat on one transaction
  and read on another; the file contents is always up-to-date.
 
 The file is up-to-date, or the param 'users' is?
 

The file is. IE. it gets written and and the new stuff is available
by simply reloading the page.

 Why don't you debug it a little by putting a warn statement in your
 users.dat file that prints the process ID?  Then you can tell if it is
 truly being executed more than once by the same process.
 

Hmm. Not sure how to do that w/out messing w/ the headers and 
making the app. crash. How would I do that?

P

-- 

^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^
Peter Ensch,
[EMAIL PROTECTED]   A-1140   (214) 480 2333
^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^


Re: require'ing data files under mod_perl

2003-07-03 Thread Perrin Harkins
On Thu, 2003-07-03 at 16:16, Peter Ensch wrote:
   So, to reiterate, I may write to users.dat on one transaction
   and read on another; the file contents is always up-to-date.
  
  The file is up-to-date, or the param 'users' is?
  
 
 The file is. IE. it gets written and and the new stuff is available
 by simply reloading the page.

Well, the file getting written is not related to require loading each
time or not.  The thing that I would not expect to change is the
in-memory data.

  Why don't you debug it a little by putting a warn statement in your
  users.dat file that prints the process ID?  Then you can tell if it is
  truly being executed more than once by the same process.
  
 
 Hmm. Not sure how to do that w/out messing w/ the headers and 
 making the app. crash. How would I do that?

Before the hash stuff in the file, put in a statement like this:

warn users.dat loaded by process $$;

- Perrin


Re: require'ing data files under mod_perl

2003-07-03 Thread Peter Ensch
On Thu, Jul 03, 2003 at 04:24:35PM -0400, Perrin Harkins wrote:
 On Thu, 2003-07-03 at 16:16, Peter Ensch wrote:
So, to reiterate, I may write to users.dat on one transaction
and read on another; the file contents is always up-to-date.
   
   The file is up-to-date, or the param 'users' is?
   
  
  The file is. IE. it gets written and and the new stuff is available
  by simply reloading the page.
 
 Well, the file getting written is not related to require loading each
 time or not.  The thing that I would not expect to change is the
 in-memory data.
 
   Why don't you debug it a little by putting a warn statement in your
   users.dat file that prints the process ID?  Then you can tell if it is
   truly being executed more than once by the same process.
   
  
  Hmm. Not sure how to do that w/out messing w/ the headers and 
  making the app. crash. How would I do that?
 
 Before the hash stuff in the file, put in a statement like this:
 
 warn users.dat loaded by process $$;
 

OK. Thanks. Well, yes it is being reloaded whenever the form
is submitted and w/out restarting the server. Here's some of 
the output (error_log):

[Thu Jul  3 15:52:00 2003] users.dat: users.dat loaded by process 18294 at /opt/a...
[Thu Jul  3 15:52:00 2003] users.dat: users.dat loaded by process 18294 at /opt/a...
[Thu Jul  3 15:52:00 2003] users.dat: users.dat loaded by process 18294 at /opt/a...
[Thu Jul  3 15:52:03 2003] users.dat: users.dat loaded by process 18294 at /opt/a...
[Thu Jul  3 15:52:04 2003] users.dat: users.dat loaded by process 18294 at /opt/a...
[Thu Jul  3 15:52:06 2003] users.dat: users.dat loaded by process 18294 at /opt/a...
[Thu Jul  3 15:52:32 2003] users.dat: users.dat loaded by process 18294 at /opt/a...
[Thu Jul  3 15:52:33 2003] users.dat: users.dat loaded by process 18338 at /opt/a...
[Thu Jul  3 15:52:34 2003] users.dat: users.dat loaded by process 18338 at /opt/a...
[Thu Jul  3 15:53:00 2003] users.dat: users.dat loaded by process 18338 at /opt/a...
[Thu Jul  3 15:53:03 2003] users.dat: users.dat loaded by process 18338 at /opt/a...
[Thu Jul  3 15:53:05 2003] users.dat: users.dat loaded by process 18338 at /opt/a...
[Thu Jul  3 15:53:22 2003] users.dat: users.dat loaded by process 18338 at /opt/a...
[Thu Jul  3 15:53:25 2003] users.dat: users.dat loaded by process 18338 at /opt/a...
[Thu Jul  3 15:53:28 2003] users.dat: users.dat loaded by process 18338 at /opt/a...
[Thu Jul  3 15:53:28 2003] users.dat: users.dat loaded by process 18338 at /opt/a...

Here are the httpd process:

[490] % ps -Alf |grep apache
8 S root 17921 ... /apps/apache/http/2.0.46/worker/bin 
8 S   apache 18338 ... /apps/apache/http/2.0.46/worker/bin
8 S   apache 18336 ... /apps/apache/http/2.0.46/worker/bin
8 S   apache 18337 ... /apps/apache/http/2.0.46/worker/bin

So. What's going on? I'm not using A::Reload.

P

-- 

^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^
Peter Ensch,
[EMAIL PROTECTED]   A-1140   (214) 480 2333
^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^


Re: require'ing data files under mod_perl

2003-07-03 Thread Perrin Harkins
On Thu, 2003-07-03 at 16:59, Peter Ensch wrote:
 OK. Thanks. Well, yes it is being reloaded whenever the form
 is submitted and w/out restarting the server. Here's some of 
 the output (error_log):
 
 [Thu Jul  3 15:52:00 2003] users.dat: users.dat loaded by process 18294 at /opt/a...
 [Thu Jul  3 15:52:00 2003] users.dat: users.dat loaded by process 18294 at /opt/a...
 [Thu Jul  3 15:52:00 2003] users.dat: users.dat loaded by process 18294 at /opt/a...
 [Thu Jul  3 15:52:03 2003] users.dat: users.dat loaded by process 18294 at /opt/a...
 [Thu Jul  3 15:52:04 2003] users.dat: users.dat loaded by process 18294 at /opt/a...
 [Thu Jul  3 15:52:06 2003] users.dat: users.dat loaded by process 18294 at /opt/a...
 [Thu Jul  3 15:52:32 2003] users.dat: users.dat loaded by process 18294 at /opt/a...
 [Thu Jul  3 15:52:33 2003] users.dat: users.dat loaded by process 18338 at /opt/a...
 [Thu Jul  3 15:52:34 2003] users.dat: users.dat loaded by process 18338 at /opt/a...
 [Thu Jul  3 15:53:00 2003] users.dat: users.dat loaded by process 18338 at /opt/a...
 [Thu Jul  3 15:53:03 2003] users.dat: users.dat loaded by process 18338 at /opt/a...
 [Thu Jul  3 15:53:05 2003] users.dat: users.dat loaded by process 18338 at /opt/a...
 [Thu Jul  3 15:53:22 2003] users.dat: users.dat loaded by process 18338 at /opt/a...
 [Thu Jul  3 15:53:25 2003] users.dat: users.dat loaded by process 18338 at /opt/a...
 [Thu Jul  3 15:53:28 2003] users.dat: users.dat loaded by process 18338 at /opt/a...
 [Thu Jul  3 15:53:28 2003] users.dat: users.dat loaded by process 18338 at /opt/a...

Just a guess, but maybe this is because you're passing a variable to the
require function.  Try hard-coding it and see if it changes.

- Perrin


Re: require'ing data files under mod_perl

2003-06-30 Thread Perrin Harkins
On Sat, 2003-06-28 at 15:08, Peter B. Ensch wrote:
 Coding in plain CGI I've often require'd files containing
 data in perl data-structures. The script may write to the 
 file (via Data::Dumper for example) allowing subsequent 
 invokations of the script to have access to the revised
 data.

It would be simpler and faster to use MLDBM::Sync for this.

 I was expecting this methodology to break under mod_perl
 thinking that the require would only happen once (the
 first time the script runs after server startup); however,
 it seems to be working the way it always did.
 
 Why is this? Am I missing something?

Can't tell without seeing some code.  Your require'd files with not be
reloaded unless you are using Apache::Reload or Apache::StatINC to force
them.

- Perrin


require'ing data files under mod_perl

2003-06-28 Thread Peter B. Ensch
Coding in plain CGI I've often require'd files containing
data in perl data-structures. The script may write to the 
file (via Data::Dumper for example) allowing subsequent 
invokations of the script to have access to the revised
data.

I was expecting this methodology to break under mod_perl
thinking that the require would only happen once (the
first time the script runs after server startup); however,
it seems to be working the way it always did.

Why is this? Am I missing something?

Thanks,
P

-- 
^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~
Peter B. Ensch ([EMAIL PROTECTED])  

Linux 2.4.20-4GB 12:00pm Up 6 days 18:33
^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~