[Catalyst] Running system commands under FastCGI with IPC::Cmd
/ IPC::Run
Stuart Watt
swatt at infobal.com
Thu Oct 21 19:29:32 GMT 2010
You may want to check your version of FCGI. There are previous reports =
of related issues, which seem to be an interaction between IPC::* =
modules expectations of standard input/output/error, and FCGI, which =
fakes them. See =
http://www.mail-archive.com/ports@openbsd.org/msg16948.html for an =
example. In my FCGI, the FILENO method is present, but this appears to =
have been added in version 0.67_01 on 20 Dec 2009 - this is pretty =
recent and your Perl may not include it.
--S
Stuart Watt
ARM Product Developer
Information Balance
On 10/21/2010 2:43 PM, Ian Sillitoe wrote:
>
> I have a Catalyst model that runs a system command as part of a search =
> facility. The system call only takes a fraction of a second so is =
> processed inline and this all works fine when tested outside of =
> Catalyst and when called under the Catalyst standalone server. =
> However, when I deploy it to my FastCGI environment I have problems - =
> everything seems to work fine apart from the results of the system call.
>
> The system call is (give or take):
>
> IPC::Cmd::run(
> command =3D> [qw/ blastall -d sequences.db -i input.fa -o =
> output.results /],
> verbose =3D> 0,
> timeout =3D> 10,
> );
>
> When run under the test server the file 'output.results' contains the =
> results of the search:
>
> gi|5524211|gb|AAD441661| pdb|3cx5C00 45.26 285 =
> 154 1 1 283 91 375 4e-73 267
> gi|5524211|gb|AAD441661| pdb|2e74A00 33.33 99 =
> 65 1 21 118 117 215 9e-16 77.0
> gi|5524211|gb|AAD441661| pdb|2ih2A01 34.78 23 =
> 15 0 115 137 85 107 4.0 25.0
> ...
>
> When the same application is being run under FastCGI the file is =
> created but is empty.
>
> The system call was originally being wrapped with IPC::Cmd (via =
> MooseX::Role::Cmd). I checked what happened when I explicitly used =
> IPC::Run
>
> my ($in, $out, $err);
> my $success =3D IPC::Run::run [qw/ blastall -d sequences.db -i =
> input.fa -o output.results /], \$in, \$out, \$err, IPC::Run::timeout( =
> 10 );
>
> This works under the test server, but throws the following error under =
> FastCGI:
>
> |"Can't locate object method "FILENO" via package "FCGI::Stream" at /home=
/ian/perl5/lib/perl5/IPC/Run.pm line 1115.
>
> |
>
> If I bypass IPC::* and run the system command with backticks then it =
> seems to work fine under both the test server and FastCGI. However the =
> system call is happening a long way away from Catalyst - I don't =
> really want to hard code this with backticks just to get it working =
> under FastCGI.
>
> There seems to be a few different things going on here - I'm not sure =
> exactly where the problem lies or what might be a red herring - would =
> be grateful if anyone can help point me in the right direction.
>
> Cheers,
>
> Ian
>
>
>
>
> Running FastCGI server on my desktop on port 3001:
>
> script/my_app_fastcgi.pl <http://my_app_fastcgi.pl> -l bsmlx53:3001 =
> -n 3 -p my-app.pid -d
>
> Forwarding requests there from external facing server with the =
> following config:
>
> <VirtualHost *:80>
> ServerName test.foo.com <http://test.foo.com>
> DocumentRoot /home/ian/My-App/trunk/
> ErrorLog logs/test.foo.com-error_log
>
> FastCgiExternalServer /tmp/my-app.fcgi -host bsmlx53:3001
>
> Alias /static /home/ian/My-App/trunk/root/static
> Alias / /tmp/my-app.fcgi/
> </VirtualHost>
>
> Modules:
>
> Catalyst::Runtime (5.80029)
> IPC::Run (0.89)
> FCGI (0.67)
>
>
>
> -- =
> This message was scanned by ESVA and is believed to be clean.
> Click here to report this message as spam. =
> <http://antispam.infobal.com/cgi-bin/learn-msg.cgi?id=3D7751128072.AE451>
>
>
> _______________________________________________
> List: Catalyst at lists.scsys.co.uk
> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
> Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.u=
k/
> Dev site: http://dev.catalyst.perl.org/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.scsys.co.uk/pipermail/catalyst/attachments/20101021/936e6=
d68/attachment.htm
More information about the Catalyst
mailing list