2013-04-17 2 views
2

Я пытаюсь создать веб-приложение, используя блестящий. Мне нужно загрузить пакет, который я установил на свой компьютер. Например:Пакеты, отсутствующие в блестящем сервере

## Contents ui.R: 
library(shiny) 
library(plyr) 

shinyUI(pageWithSidebar(

    headerPanel("Hello Shiny!"), 

    sidebarPanel(
    sliderInput("obs", 
       "Number of observations:", 
       min = 0, 
       max = 1000, 
       value = 500) 
), 

    mainPanel(
    plotOutput("distPlot") 
) 
)) 

## Contents server.R: 
library(shiny) 
library(plyr) 

shinyServer(function(input, output) { 

    output$distPlot <- renderPlot({ 

    # generate an rnorm distribution and plot it 
    dist <- rnorm(input$obs) 
    hist(dist) 
    }) 
}) 

Это прекрасно работает, если я запустить его локально (с помощью runApp), но когда я пытаюсь запустить его через мой сервер (тот же компьютер), я получаю ошибку, что plyr пакет (или любой другой пакет я попробуйте использовать этот способ) не установлен. Как я могу использовать дополнительные пакеты на блестящем сервере?

ответ

7

Сравните результаты .libPaths() в обоих случаях и соответствующим образом настройте их в экземпляре сервера/вашем скрипте.

Возможно, у вас есть пакеты в «вашем» каталоге пакетов R, к которому сервер не может получить доступ. Общесистемные установки пакетов предпочтительнее в таких случаях, и это, например, по умолчанию на Debian/Ubuntu.

+1

Простой способ проверить на самом деле 'sudo R', а затем посмотреть (например,' library (myPotentiallyMissingPackage) '). При необходимости вы также можете установить свои отсутствующие пакеты. –

+4

Do. Не. Начало. R. As. Судо. Когда-либо. –

+8

Ну, кажется, это очень плохо, но могу ли я спросить: почему? :-) –

-2

Зачем вам нужен Plyr? ничего в коде не используется; но в любом случае вы можете устанавливать пакеты в Linux R путем запуска R, затем install.packages ('plyr');

5

Проблема заключается в том, что блестящий сервер не может найти пакеты, которые вы устанавливаете, поскольку он запускает их как другого пользователя, который называется shiny. Этот пользователь создается при установке блестящего сервера

Самый простой (и безопасный метод IMHO) - это просто установить пакеты в качестве блестящего пользователя, выполнив следующие шаги.

  1. Установите пароль для пользователя с помощью sudo passwd shiny, теперь ввести и подтвердить пароль
  2. Переключить на блестящую учетную запись с помощью: su - shiny
  3. Вызова R с помощью $ R (без Судо)
  4. Установите требуемый в этом случае: install.packages("plyr")

Обратите внимание, что если у вас установлен rstudio-сервер на той же машине то вы можете выполнить шаги 2-4 с использованием этого интерфейса. Просто перейдите в тот же домен/ip и используйте: 8787 для интерфейса rstudio-server вместо: 3838 для блестящего сервера.

Адаптировано из моего ответа here.

+0

Шаг 1, я получаю «passwd: Неизвестное имя пользователя». - любые решения? – maia

+0

@maia, эта учетная запись должна была быть создана при установке 'shiny-server', однако вы можете вручную сделать это, используя:' useradd shiny'. Надеюсь, это сработает. –

+0

вам не нужно добавлять пароль для пользователя. Просто начните с шага 2, 'su - shiny'. – nycynik

0

Я обновил с R 3.2 до 3.4 и столкнулся с той же проблемой, после чего я создал папку с именем 3.4 в R/x86_64-pc-linux-gnu-library/и скопировал все из папки 3.2 (которая уже существует в том же месте).

+0

Это не дает ответа на вопрос. Когда у вас будет достаточно [репутации] (https://stackoverflow.com/help/whats-reputation), вы сможете [прокомментировать любое сообщение] (https://stackoverflow.com/help/privileges/comment); вместо этого [предоставить ответы, которые не требуют разъяснений у аськи) (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- я-делать-вместо этого). - [Из обзора] (/ review/low-quality-posts/17227371) –

+0

Это не отвечает на вопрос. Если у вас есть другой вопрос, вы можете задать его, нажав [Ask Question] (https://stackoverflow.com/questions/ask). Вы также можете [добавить щедрость] (https://stackoverflow.com/help/privileges/set-bounties), чтобы привлечь больше внимания к этому вопросу, как только у вас будет достаточно [репутации] (https://stackoverflow.com/help/ Что-репутация). - [Из обзора] (/ review/low-quality-posts/17227371) – Lundin

1

Здесь может быть решение, которое не испортит системную библиотеку. Поместите следующий код в начало server.R.

user <- unname(Sys.info()["user"]) 
if (user == "shiny") { 

    # Set library locations 
    .libPaths(c(
    "/path/to/your/own/library" 
) 
) 

} 

Это позволяет Блестящая искать пакеты, установленные в вашей собственной библиотеке преимущественно, а также хранит пакеты, которые вы используете для разработки приложений и пакетов используется, когда приложение развертывается в синхронизации.

Обратите внимание, что вам может потребоваться настроить права доступа к папке вашей библиотеки для пользователя shiny, чтобы увидеть его должным образом. В противном случае он не сможет заглянуть в указанное вами местоположение без сообщения об ошибке.

 Смежные вопросы

  • Нет связанных вопросов^_^