Как установить libpq на Heroku?

#r #postgresql #heroku

#r #postgresql #heroku

Вопрос:

Итак, я смог развернуть приложение Heroku, которое должно содержать мои RScripts: init.R и access_heroku.R

Моя главная цель — протестировать, как сохранять базу данных на Heroku и получать к ней доступ, чтобы запрашивать ее и создавать некоторые графики (скорее всего, в ShinyApp в будущем).

Итак, я также нашел эту суть у талантливого: @hrbrmstr

https://gist.github.com/hrbrmstr/45c67103a9728f59212cd13262adca74

И это другое руководство о том, как устанавливать пакеты в Heroku с помощью init.R скрипта.

https://www.r-bloggers.com/running-an-r-script-on-heroku/

инициализация.R

 my_packages <- c("processx","RPostgres","httr", "dbplyr", "tidyverse")
install_if_missing <- function(p) {
  if(p %in% rownames(installed.packages())==FALSE){
    install.packages(p)}
}

invisible(sapply(my_packages, install_if_missing))  

К сожалению, при развертывании на heroku я получаю эту ошибку, в которой говорится, что libpq не был найден и поэтому RPostgres не удалось установить.

Heroku-URL приложения:https://blooming-waters-73325.herokuapp.com /

 remote:        * installing *source* package ‘RPostgres’ ...
    remote:        ** package ‘RPostgres’ successfully unpacked and MD5 sums checked
    remote:        Using PKG_CFLAGS=
    remote:        Using PKG_LIBS=-lpq
    remote:        ------------------------- ANTICONF ERROR ---------------------------
    remote:        Configuration failed because libpq was not found
  

Как вы можете видеть ниже, в нем даются инструкции по установке libpq в разных системах. Я не знаю, в какой «системе» развернуто мое приложение heroku, поэтому я не знаю, какой вариант реализовать и как?

Должен ли я положить это внутрь init.R ?

 remote: -----> R Console app detected
remote: -----> Vendoring R 3.4.4 for heroku-16 stack (latest)
remote:        Retrieving R binaries from cache
remote: -----> Executing R init script
remote:        Installing package into ‘/usr/local/lib/R/site-library’
remote:        (aslibis unspecified)
remote:        trying URL 'https://cloud.r-project.org/src/contrib/RPostgres_1.1.1.tar.gz'
remote:        Content type 'application/x-gzip' length 44803 bytes (43 KB)
remote:        ==================================================
remote:        downloaded 43 KB
remote:
remote:        * installing *source* package ‘RPostgres’ ...
remote:        ** package ‘RPostgres’ successfully unpacked and MD5 sums checked
remote:        Using PKG_CFLAGS=
remote:        Using PKG_LIBS=-lpq
remote:        ------------------------- ANTICONF ERROR ---------------------------
remote:        Configuration failed because libpq was not found. Try installing:
remote:         * deb: libpq-dev (Debian, Ubuntu, etc)
remote:         * rpm: postgresql-devel (Fedora, EPEL)
remote:         * rpm: postgreql8-devel, psstgresql92-devel, postgresql93-devel, or postgresql94-devel (Am
azon Linux)
remote:         * csw: postgresql_dev (Solaris)
remote:         * brew: libpq (OSX)
remote:        If libpq is already installed, check that either:
remote:        (i)  'pkg-config' is in your PATH AND PKG_CONFIG_PATH contains
remote:             a libpq.pc file; or
remote:        (ii) 'pg_config' is in your PATH.
remote:        If neither can detect , you can set INCLUDE_DIR
remote:        and LIB_DIR manually via:
remote:        R CMD INSTALL --configure-vars='INCLUDE_DIR=... LIB_DIR=...'
remote:        --------------------------------------------------------------------
remote:        ERROR: configuration failed for package ‘RPostgres’
remote:        * removing ‘/usr/local/lib/R/site-library/RPostgres’
remote:
remote:        The downloaded source packages are in
remote:         ‘/tmp/RtmpZjXuPF/downloaded_packages’
remote:        Warning message:
remote:        In install.packages(p) :
remote:          installation of package ‘RPostgres’ had non-zero exit status
remote:        R 3.4.4 successfully installed (with init)
  

В конце я хотел бы разместить набор данных iris на Heroku и иметь возможность запрашивать его, чтобы показать некоторые графики. Мой скрипт печатает его только в конце, но это нормально, так как я знаю, как создавать графики с ggplot2 .

ОБНОВЛЕНИЕ 1:

Благодаря ответу Криса я смог установить libpq-dev , но теперь я получаю эту ошибку:

 remote:        Processing triggers for libc-bin (2.23-0ubuntu10) ...
    remote:        Processing triggers for man-db (2.7.5-1) ...
    remote:        /usr/bin/mandb: error while loading shared libraries: libmandb-2.7.5.so: cannot open shared
  

Итак, основываясь на ответе Криса, который я поставил libman на Aptfile , но теперь я получаю:

 remote: -----> Installing binary dependencies from Aptfile
remote: Reading package lists...
remote: Building dependency tree...
remote: Reading state information...
remote: E: Unable to locate package libmandb-2.7.5
remote: E: Couldn't find any package by glob 'libmandb-2.7.5'
remote: E: Couldn't find any package by regex 'libmandb-2.7.5'
remote: -----> Executing R init script
  

Что я могу сделать?

 Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 371 bytes | 123.00 KiB/s, done.
Total 4 (delta 1), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> R Console app detected
remote: -----> Vendoring R 3.4.4 for heroku-16 stack (latest)
remote:        Retrieving R binaries from cache
remote: -----> Installing binary dependencies from Aptfile
remote:        Reading package lists...
remote:        Building dependency tree...
remote:        Reading state information...
remote:        E: Unable to locate package libmandb-2.7.5
remote:        E: Couldn't find any package by glob 'libmandb-2.7.5'
remote:        E: Couldn't find any package by regex 'libmandb-2.7.5'
remote: -----> Executing R init script
remote:        R 3.4.4 successfully installed (with init)
remote: -----> Caching build outputs
remote:        Build took 68 seconds to complete
remote: -----> Discovering process types
remote:        Procfile declares types     -> (none)
remote:        Default types for buildpack -> console
remote:
remote: -----> Compressing...
remote:        Done: 311.2M
remote: -----> Launching...
remote:  !     Warning: Your slug size exceeds our soft limit (311 MB) which may affect boot time.
remote:        Released v9
remote:        https://blooming-waters-73325.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/blooming-waters-73325.git
   79635e7..4fcab2b  master -> master
  

Комментарии:

1. Это странно. У меня нет большого опыта работы с R, но очень часто используется Postgres из Heroku. Heroku должен предоставлять библиотеки Postgres из коробки. Поддерживается ли R официально? Используете ли вы сторонний пакет сборки? Если да, то какой именно?

2. @Chris это пакет сторонних разработчиков: github.com/virtualstaticvoid/heroku-buildpack-r.git#heroku-16 . В моем вопросе приведена ссылка на сообщение в блоге с инструкциями по загрузке приложения на heroku.

Ответ №1:

Попробуйте включить файл с именем Aptfile в корень вашего репозитория, содержащий

 libpq-dev
  

Это название пакета Ubuntu, который рекомендуется установить в сообщении об ошибке. Используемый вами R buildpack должен установить пакет за вас при следующем развертывании.

Комментарии:

1. спасибо, что указали мне на эту часть Readme. Я решил эту проблему с libpq-dev, но теперь у меня другое сообщение об ошибке. Пожалуйста, посмотрите мое обновление 1. Спасибо.

2. @OmarGonzales, я смог без каких-либо проблем развернуть крошечное R-приложение с libpq-dev помощью Heroku, используя пустое run.R и Aptfile содержащее только строку в этом ответе. Используете ли вы heroku-16 стек? Какие еще библиотеки вы пытаетесь установить? Если это не связано с libpq-dev установкой, вам, вероятно, следует задать новый вопрос, как только вы определили причину этой проблемы.

3. другие библиотеки находятся в файле mu init.R, он размещен в моем вопросе в виде скрытого фрагмента. Вам нужно было бы расширить это. Спасибо за ваш вклад.

4. @OmarGonzales, с пустым, run.R предложенным Aptfile мной и вашим init.R , я снова смог успешно выполнить развертывание на Heroku. The «libmandb-2.7.5.so : не удается открыть общий объектный файл: нет такого файла или каталога » сообщение — это просто предупреждение, а не ошибка. Вам не нужно добавлять libman в свой Aptfile . Извлеките его обратно, используйте то, что Aptfile я предоставил при установке libpq-dev , и попробуйте свой R-код.