Pregunta

Estoy tratando de desarrollar una aplicación web en Perl usando Hipertible. Código de muestra:

#!/usr/bin/perl -w
use strict;
use warnings;
use CGI;
use CGI::Carp qw/fatalsToBrowser warningsToBrowser/;
use CGI::Session ('-ip_match');
use Hypertable::ThriftClient;
use Data::Dumper;

my $q = new CGI;
print $q->header(-cache_control => "no-cache, no-store, must-revalidate");

eval {
    my $client    = new Hypertable::ThriftClient("localhost", 38080);
    my $namespace = $client->open_namespace("glinpe");
    my $result    = $client->hql_exec($namespace, "select * from words where row=\"maths\" keys_only");
};

if ($@) {
    if ($@->isa('Thrift::TException')) {
        print Dumper($@);
    } else {
        print Dumper($@);
    }
}
print "<h1>works</h1>";

El problema es que cuando se intenta ejecutar desde un navegador web recibo un error:

$VAR1 = bless( { 'code' => 0, 'message' => 'TSocket: Could not connect to localhost:38080 (Permission denied)' }, 'Thrift::TException' );

Los scripts funcionan correctamente cuando se ejecutan desde un terminal (bajo el usuario de Apache), y también en un navegador si elimina todo el código hipertible.

Tengo el puerto 38080 abierto en iptables:

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 38080 -j ACCEPT

OS: Centos 5.6.

¿Fue útil?

Solución 2

OK, entonces hay dos solución a este problema en particular: 1. Desactivar Selinux - Cambiar la configuración en/etc/selinux/config 2. Ejecutar comando:

setsebool -p httpd_can_network_connect 1

Gracias a la respuesta anterior por volver a encaminarme.

Otros consejos

El mensaje de error dice que le falta permiso, por lo que esa sería la respuesta (el usuario Apache no tiene permiso para crear socket a localhost: 38080)

ACTUALIZACIÓN: Para elaborar, cuando lo ejecuta desde un terminal, se está ejecutando como un usuario normal, pero cuando Apache lo ejecuta, la mayoría de las veces se ejecuta en la cuenta de usuario Apache, que puede no tener permiso para abrir enchufes

Podría ser que esté utilizando Selinux en cuyo caso consulte 'Man Chcon' o busque "Tutorial de Selinux: Configuración de RHEL 5 y servidores web"

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top