Domanda

Sto cercando di sviluppare una web app in Perl utilizzando Hypertable . codice di esempio:

#!/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>";

Il problema è quando si tenta di eseguire da un browser web ottengo un errore:

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

Gli script funziona correttamente quando si esegue da un terminale (sotto apache utente), e pure in un browser, se rimuovere tutto il codice Hypertable.

Ho 38080 porta aperta nel iptables:

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

OS:. Centos 5.6

È stato utile?

Soluzione 2

OK, quindi non c'è due soluzione a questo problema particolare: 1. Disattivare selinux - modificare la configurazione in / etc / selinux / config 2. comando di marcia:

setsebool -P httpd_can_network_connect 1

Grazie alla risposta precedente per avermi messo di nuovo in pista.

Altri suggerimenti

Il messaggio di errore dice che vi state perdendo il permesso, in modo che sarebbe la risposta (apache utente, non hai il permesso di creare il socket a localhost: 38080)

Aggiornamento: elaborare, quando lo si esegue da un terminale, è in esecuzione come un utente normale, ma quando apache lo gestisce, il più delle volte è in esecuzione in apache account utente, che potrebbe non avere il permesso di socket aperti

Potrebbe essere che si sta utilizzando SELinux in questo caso vedere 'uomo chcon' o la ricerca di "Esercitazione SELinux: Configurazione RHEL 5 e Web server"

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top