Как установить libpq на 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))

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

URL-адрес приложения Heroku: 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:        (as ‘lib’ is 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)

В конце концов, я хотел бы разместить набор данных радужной оболочки на 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

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

Chris 16.03.2019 14:04

@Chris, это сторонний пакет сборки: github.com/virtualstaticvoid/heroku-buildpack-r.git#heroku-1‌​6. В моем вопросе есть ссылка на сообщение в блоге с инструкциями по загрузке приложения на героку.

Omar Gonzales 16.03.2019 18:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
453
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

libpq-dev

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

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

Omar Gonzales 17.03.2019 03:13

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

Chris 17.03.2019 18:22

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

Omar Gonzales 17.03.2019 18:23

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

Chris 17.03.2019 18:35

Другие вопросы по теме