Tomas Gonzalez
Tomas Gonzalez

Reputation: 1175

CakePHP 2.2 AclExtras aco_sync in browser (sh permission denied)

I'm working on a remote server and I can't use the console because ssh is not enabled. So I need to run aco_sync directly from the browser (or any other way that doesn't involve the shell).

I managed to sync acos on my local dev server with the following code in controller/action:

$command = ROOT . DS . APP_DIR . DS . 'Console' . DS . 'cake';
$params = ' -app ' . ROOT . DS . APP_DIR;
$params .= ' AclExtras.AclExtras';
$params .= ' aco_sync';
$result = shell_exec($command . $params);

But on the production server (with cPanel) I just get no response for about 5 minutes and then I get an internal server error (500). I simply hangs. Actually, this happened on two different VPS servers with cPanel. In the first one, I had ssh and was able to run the command from the console. But when running the quoted code from the browser, I hung just as the other server.

I've seen some implementations using $dispatcher->dispatch() and tried a bunch of them but with no luck.

Any ideas?

Upvotes: 0

Views: 1540

Answers (2)

Dario Collazos Zic
Dario Collazos Zic

Reputation: 1

Try this, the $dispatcher->dispatch(); seems to show something only in case of an error. run this and check your database.

    App::uses('ShellDispatcher', 'Console');
    $command = '-app '.APP.' AclExtras.AclExtras aco_sync';
    $args = explode(' ', $command);
    $dispatcher = new ShellDispatcher($args, false);

    try {
        $dispatcher->dispatch();
    } catch (Exception $e) {
        pr($e);
    }

Upvotes: 0

Bruno Berté
Bruno Berté

Reputation: 66

App::uses('ShellDispatcher', 'Console');
$command = '-app '.APP.' AclExtras.AclExtras aco_sync';
$args = explode(' ', $command);
$dispatcher = new ShellDispatcher($args, false);
if($dispatcher->dispatch()) {
    echo 'OK';
} else {
    echo 'Error';
}

Upvotes: 5

Related Questions