Frage

Ich versuche, eine Web -App in Perl zu entwickeln Hypertabil. Beispielcode:

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

Das Problem ist, wenn Sie versuchen, aus einem Webbrowser auszuführen. Ich erhalte einen Fehler:

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

Die Skripte funktionieren ordnungsgemäß, wenn Sie von einem Terminal (unter Apache -Benutzer) aus ausgeführt werden, und auch in einem Browser, wenn Sie alle Hypertiercode entfernen.

Ich habe 38080 Port in iptables geöffnet:

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

OS: CentOS 5.6.

War es hilfreich?

Lösung 2

OK, also gibt es zwei Lösung für dieses spezielle Problem: 1. Deaktivieren Sie Selinux - Konfiguration ändern in/etc/selinux/config 2. Befehl ausführen:

setsbool -p httpd_can_network_connect 1

Vielen Dank an die vorherige Antwort, die mich wieder in die richtige Kurs gebracht hat.

Andere Tipps

In der Fehlermeldung heißt es, dass Ihnen die Erlaubnis fehlt. Dies wäre also die Antwort (Benutzer Apache, keine Berechtigung, Socket nach Localhost: 38080 zu erstellen).

UPDATE: Um dies auszuarbeiten, wird es beim Ausführen von einem Terminal als regulärer Benutzer ausgeführt. Wenn Apache es jedoch ausführt, wird es meistens unter Apache -Benutzerkonto ausgeführt, die möglicherweise nicht die Berechtigung zum Öffnen von Sockets verfügt

Es könnte sein, dass Sie Selinux verwenden. In diesem Fall siehe 'Man chcon' oder suche nach "SELINUX -Tutorial: Konfigurieren von RHEL 5 und Webservern"

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top