Запустите exec () Rscript из WordPress установки - PullRequest
3 голосов
/ 13 декабря 2011

Цель: Запустите простой Rscript со страницы WordPress.

  • В настоящее время я пытаюсь запустить Rscript, используя exec () при загрузке страницы. Сценарий создает гистограмму из 100 случайных выборок из целых чисел от 1 до 10, записывает системное время в заголовок и сохраняет рисунок в файл .png.

Настройка

  • Запуск установки Wordpress на микроэкземпляре Ubuntu EC2
  • R был успешно установлен и протестирован через ssh
  • Использование плагина Exec-PHP Wordpress для написания и выполнения PHP-кода (успешно протестировано)

PHP-код (на странице WordPress)

    <?php 
    echo "This is the Exec-PHP 'Hello World'\n"; 
    echo exec("date");
    ?>

    <?php
    exec("Rscript <PATH>/test.R");
    ?>

    <img src="<Image Location>/samplePlot.png" alt="" title="Sample R" />

Rscript - test.R

    png( "<Image Location>/samplePlot.png")
    hist( sample( 1:10, 100, replace = TRUE), main= Sys.time(), lwd = 5)
    dev.off()

Файл изображения загружается, но не обновляется, указывая, что Rscript никогда не выполнялся. Я выделил это на то, что это проблема, но не уверен, почему это так.

Как я могу отладить это? Я действительно не знаю PHP, но я попробовал следующее:

    <?php
    exec("\usr\bin\Rscript <PATH>/test.R", $output, $result);
    echo $output;
    echo $result
    ?>

Что возвращает:

Array2

Я надеялся получить вывод командной строки для проверки на наличие ошибок. Это возможно?

Ответы [ 2 ]

2 голосов
/ 05 ноября 2012

Чтобы получить представление о проблеме, попробуйте:

$e = exec("\usr\bin\Rscript <PATH>/test.R 2>&1");
var_dump($e);

Если вы получаете что-то вроде: Ошибка в dyn.load (file, DLLpath = DLLpath, ...) ... вам, вероятно, нужно обновить динамические библиотеки серверов (попробуйте поискать libfreetype.dylib), или, если вы используете MAMP (как я), вам нужно прокомментировать (#) две строки без комментариев: / Applications / MAMP / Library / bin / envvars

Я знаю, что прошло много времени с тех пор, как вы отправили вопрос, но я провожу много времени с подобной проблемой - надеюсь, кто-то может сэкономить время;)

2 голосов
/ 13 декабря 2011

Я думаю, что проблема в том, что вы не указали полный путь к Rscript, а пользователь, работающий с PHP / Apache, просто не знает, где его искать.

Обновите это execкоманда вроде (в Linux):

exec("/usr/bin/Rscript <PATH>/test.R");

В любом случае, я бы предложил установить littler для этой задачи позже и (исходя из этого) запустить r вместо Rscript для разрешениявсе работает намного быстрее - при установке, например. rApache не вариант.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...