2011-06-12 50 views
1

我正在嘗試使用Hypertable在Perl中開發Web應用程序。示例代碼:在訪問CGI程序中的Hypertable時拒絕訪問

#!/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 ([email protected]) { 
    if ([email protected]>isa('Thrift::TException')) { 
     print Dumper([email protected]); 
    } else { 
     print Dumper([email protected]); 
    } 
} 
print "<h1>works</h1>"; 

試圖從Web瀏覽器執行,我得到一個錯誤,當問題是:從終端運行時

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

腳本正常工作(下apache用戶),和如果刪除所有Hypertable代碼,那麼在瀏覽器中。

我已經38080端口iptables中打開:

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

OS:Centos的5.6。

回答

0

行,所以在兩個解決這個特定的問題: - :

setsebool -P httpd_can_network_connect 1

由於先前 1.禁用SELinux在/ etc/selinux的/配置 2.運行指令改變配置讓我回到正軌的答案。

0

錯誤消息說你缺少的權限,所以這將是答案(用戶阿帕奇,沒有權限創建插座爲localhost:38080)

更新:闡述,當你運行它從一個終端開始,它就像普通用戶一樣運行,但是當apache運行它時,它通常是在apache用戶帳戶下運行的,它可能沒有打開套接字的權限

它可能是你在使用SELinux案例參見'man chcon' 或搜索「SELinux教程:配置RHEL 5和Web服務器」

+0

我已經嘗試手動切換到apache用戶並再次在終端中運行腳本。它仍然有效(但不是來自瀏覽器)。我在iptables中打開了需要的端口。 – 2011-06-12 23:59:15