2016-04-21 3 views
4

Я использую сюжетный пакет для отображения графика в блестящем. На моей локальной машине сюжет получается отлично, однако когда я запускаю блестящее приложение на блестящем сервере, я получаю сообщение об ошибке «Ошибка: не могу открыть файл« Rplots.pdf », где предполагается, что сюжет будет отображаться. Я попытался использовать команду dev.off(), поскольку я прочитал некоторые другие возможные решения, которые ссылались на это как на возможное решение. Ниже я вставил свой код для создания графа в сценарии server.R:Земельный участок не рендеринга на блестящем сервере

output$recSalesPlot <- renderPlotly({ 
     BWplot_rec <- ggplot(d1, aes_string(x = "End_of_Week", y = input$metric_rec)) 
      BWplot_rec <- BWplot_rec + geom_line(aes(color = Group), size = .25) 
      BWplot_rec <- BWplot_rec + geom_point(aes(color = Group), size = 2) 
      BWplot_rec <- BWplot_rec + xlab("Week") 
      if(input$metric_rec == "NetSales"){ 
       BWplot_rec <- BWplot_rec + ylab("Euros") 
      } 
      BWplot_rec <- BWplot_rec + ggtitle(paste0("Average ", input$metric_rec, " Per Group Per Week")) 
      BWplot_rec <- BWplot_rec + guides(color=FALSE) 
      BWplot_rec <- BWplot_rec + theme(panel.grid.major.y = element_blank(), 
              panel.grid.minor.y = element_blank()) 
      p <- ggplotly(BWplot_rec) 
      p 
      }) 
} 

В сценарии ui.R Я использую следующую команду, чтобы вызвать сюжет:

plotlyOutput("recSalesPlot", width = "100%", height = 600) 
+0

Вы сравниваете sessionInfo вашего локального R с блестящим сервером? Чтобы убедиться, что у вас есть все необходимые пакеты на блестящем сервере. – MLavoie

+0

Я еще этого не сделал, я сделаю это и посмотрю, в чем дело. Я читал одну возможную причину, так это то, что замысел пытается написать временный файл, но не имеет разрешения при доступе с сервера, но он работает от моего локального пользователя, и поэтому он работает на моем локальном, но не на сервере. – mikew

ответ

8

Я могу» t сказать, что я понимаю корень проблемы или почему мое решение даже работает для меня, но я столкнулся с той же проблемой и просто добавил pdf(NULL) в начале моего скрипта, и все, кажется, работает нормально. Нет dev.off() нужный (добавив его, я сделал ошибку для меня).

+0

Jenwen, Спасибо! Это решение работает и для меня. Похоже, что он останавливает R от создания этих временных PDF-файлов, которые изначально вызывают ошибку. – mikew

+0

Где именно вы помещаете 'pdf (NULL)'? В верхней части 'ui.R', в начале вашей функции построения графика или что-то еще? – landau

+0

Кроме того, будет ли это создавать слишком много открытых устройств? – landau

2

jenwen ответ в целом правильно, но: Пожалуйста, обратите внимание, что вы должны добавить pdf(NULL) внутри renderPlotly() не начало сценария. А также, если вы начнете звонить renderPlotly() с pdf(NULL) еще раз, это создаст ошибку «слишком много открытых устройств», которая убьет все ваши графические устройства на сервере, в том числе png, tiff и т. Д. Не только pdf. Чтобы решить эту проблему - незадолго до pdf(NULL) вы можете позвонить graphics.off(), чтобы очистить все доступные в настоящее время устройства и иметь только один.

3

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

Я предлагаю избегать ответа @ jenwen, потому что он обходит проблему с корнем, не пытаясь написать промежуточный файл, но часто приводит к Error in plot(NULL): too many open devices с интенсивным использованием пользователем.

Лучшее решение должно соответствовать соглашениям с блестящим сервером: при помещении приложения в блестящий серверный каталог, например. /srv/shiny-server/app-name, я изменить права доступа для пользователя, который был настроен для запуска блестящего-сервера:

sudo chown -R shiny:shiny /srv/shiny-server/app-name 

Таким образом, пользователь может записывать и удалять временные каталоги в пределах этого приложения без проблем.

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