Я отвечу на это с точки зрения R.Как правило, вы столкнетесь с двумя проблемами:
1) Взаимодействие с R, независимо от того, где он работает
2) Это делается из Heroku, где есть особый набор задач.
Существует несколько общих подходов к первому из них - вы можете использовать привязку к R (rsruby
, rinruby
и т. Д.), Вы можете выложить в R (например, из ruby).<code>R -e "RCODEHERE"
), вы можете получить доступ к R как веб-сервису (см. Пакет Rook
и, в частности, что-то вроде https://github.com/jeffreyhorner/rRack/blob/master/Rook/inst/exampleApps/RJSONIO.R),), или вы можете вручную получить доступ к R, используя что-то вроде rserve
.
Из них, проще всего сделать обстрел R, если вы просто выполняете одну операцию и не сильно озабочены производительностью. Вам нужно будет проанализировать возвращаемый результат, но это самый быстрый способ.в моем опыте для одной операции.
Для более значительного использования я бы предложил использовать одну из привязок или настроить R в качестве веб-службы в другом приложении Heroku и вызывать его через HTTP.
Следующая проблема - запустить R на Heroku - он не доступен как часть стандартной среды, и это файловая система только для чтения без корневого доступа, поэтому вы не можете просто сделать sudo apt-get install
.
Это рВозможно, продавец R превращается в драгоценный камень - кто-то начал делать это в https://github.com/deet-uc/rsruby-heroku,, но я лично не смог заставить его работать.Также возможно собрать R непосредственно на Heroku, установив все зависимости и т. Д. - этот подход я выбрал на https://github.com/noahhl/rookonheroku (шаг 1 - это все, что вам нужно, если вы не используете Rook).
Обратите внимание, что Heroku может не позволить вам запустить второй процесс в том же потоке, что и ваше приложение Rails, что и делает большинство привязок.Это может затруднить работу этих привязок, поэтому я склоняюсь к тому, чтобы либо отдавать предпочтение либо оболочке R, либо подставлять ее в качестве веб-службы и обращаться к ней через HTTP.