在 ubuntu 服务器上使用 write.csv 时权限被拒绝
Permission denied while using write.csv on ubuntu server
我有这个 R 应用程序,我用它来同时显示和修改 table,使用 rHandsontable。它托管在 Ubuntu 虚拟机上。问题是,当我 运行 我电脑上的代码时,一切正常。但是,当它在我的虚拟机上 运行 (Ubuntu 14.04.5 LTS (GNU/Linux 3.13.0-135-generic x86_64)) 时,它会在我尝试时崩溃保存它。我收到以下错误:
The application unexpectedly exited.
Diagnostic information has been dumped to the JavaScript error
console.
当我查看日志时,我看到了这个:
Loading required package: xlsxjars
Listening on http://127.0.0.1:53183
Warning in file(file, ifelse(append, "a", "w")) :
cannot open file 'listes/liste_traiteur.csv': Permission denied
Warning: Error in file: cannot open the connection
Stack trace (innermost first):
62: file
61: write.table
60: eval
59: eval
58: eval.parent
57: write.csv
56: observerFunc [/srv/shiny-server/app.R#187]
1: runApp
这是代码:
# before UI and server
filename <- as.character("liste_traiteur")
file <- paste0(filename, ".csv")
liste_menu <- read.csv(file = file, header = TRUE, sep = ",")
fname <- file # R object data frame stored as ASCII text
values <- list()
setHot <- function(x) values[["hot"]] <<- x
# inside the server
observe({
input$saveBtn # update csv file each time the button is pressed
if (!is.null(values[["hot"]])) { # if there's a table input
write.csv(values[["hot"]], fname) # overwrite the temporary database file
write.csv(x = values[["hot"]], file = fname, row.names = FALSE) # overwrite the csv
shinyjs::hide("modification")
shinyjs::show("modif_reussie")
shinyjs::reset("form")
liste_menu <- read.csv(file = fname, header = TRUE, stringsAsFactors = FALSE)
}
})
output$hot <- renderRHandsontable({
if (!is.null(input$hot)) { # if there is an rhot user input...
DF <- hot_to_r(input$hot) # convert rhandsontable data to R object and store in data frame
setHot(DF) # set the rhandsontable values
} else {
DF <- read.csv(file = fname, header = TRUE, stringsAsFactors = FALSE) # else pull table from the csv (default)
setHot(DF) # set the rhandsontable values
}
rhandsontable(DF) %>% # actual rhandsontable object
hot_table(highlightCol = TRUE, highlightRow = TRUE, readOnly = FALSE) %>%
hot_col("Item", readOnly = FALSE) %>%
hot_col("Prix", readOnly = FALSE)
})
fname 是我们正在读取然后在用户使用显示的 rhandsontable 对象修改它时覆盖的文件。在UI中是这样显示的:
tabPanel("Liste de prix",
fluidPage(
shinyjs::useShinyjs(),
shinyjs::inlineCSS(appCSS),
fluidRow(
div(
id = "modification",
column(12,
rHandsontableOutput("hot"),
br(),
actionButton("saveBtn", "Enregistrer", icon = icon("floppy-o")))
)),
fluidRow(
shinyjs::hidden(
div(
id = "modif_reussie",
column(12,
h3("La modification a été effectuée avec succès."),
actionLink("autre_modif", "Revenir à la page")
))))
))
操作按钮 "saveBtn" 时发生错误。互动table中的代码最初来自:
https://gist.github.com/cxbonilla/f49a2c7dbcfa23e6931b83838fad892d
有人可以帮忙吗?这真的很奇怪,因为我的应用程序的另一部分实际上可以完美地读写 .csv - 无论是在我的计算机上还是在 VM 上。然而,它使用基本的 R 函数而不是 rHandsontable。所以我不太明白这里发生了什么。
谢谢!
您的闪亮服务器无权将文件保存到您想要的文件夹。
这样的事情可能会有所帮助:
sudo chown shiny:shiny /var/shiny-server/myfolder
我有这个 R 应用程序,我用它来同时显示和修改 table,使用 rHandsontable。它托管在 Ubuntu 虚拟机上。问题是,当我 运行 我电脑上的代码时,一切正常。但是,当它在我的虚拟机上 运行 (Ubuntu 14.04.5 LTS (GNU/Linux 3.13.0-135-generic x86_64)) 时,它会在我尝试时崩溃保存它。我收到以下错误:
The application unexpectedly exited.
Diagnostic information has been dumped to the JavaScript error console.
当我查看日志时,我看到了这个:
Loading required package: xlsxjars
Listening on http://127.0.0.1:53183
Warning in file(file, ifelse(append, "a", "w")) :
cannot open file 'listes/liste_traiteur.csv': Permission denied
Warning: Error in file: cannot open the connection
Stack trace (innermost first):
62: file
61: write.table
60: eval
59: eval
58: eval.parent
57: write.csv
56: observerFunc [/srv/shiny-server/app.R#187]
1: runApp
这是代码:
# before UI and server
filename <- as.character("liste_traiteur")
file <- paste0(filename, ".csv")
liste_menu <- read.csv(file = file, header = TRUE, sep = ",")
fname <- file # R object data frame stored as ASCII text
values <- list()
setHot <- function(x) values[["hot"]] <<- x
# inside the server
observe({
input$saveBtn # update csv file each time the button is pressed
if (!is.null(values[["hot"]])) { # if there's a table input
write.csv(values[["hot"]], fname) # overwrite the temporary database file
write.csv(x = values[["hot"]], file = fname, row.names = FALSE) # overwrite the csv
shinyjs::hide("modification")
shinyjs::show("modif_reussie")
shinyjs::reset("form")
liste_menu <- read.csv(file = fname, header = TRUE, stringsAsFactors = FALSE)
}
})
output$hot <- renderRHandsontable({
if (!is.null(input$hot)) { # if there is an rhot user input...
DF <- hot_to_r(input$hot) # convert rhandsontable data to R object and store in data frame
setHot(DF) # set the rhandsontable values
} else {
DF <- read.csv(file = fname, header = TRUE, stringsAsFactors = FALSE) # else pull table from the csv (default)
setHot(DF) # set the rhandsontable values
}
rhandsontable(DF) %>% # actual rhandsontable object
hot_table(highlightCol = TRUE, highlightRow = TRUE, readOnly = FALSE) %>%
hot_col("Item", readOnly = FALSE) %>%
hot_col("Prix", readOnly = FALSE)
})
fname 是我们正在读取然后在用户使用显示的 rhandsontable 对象修改它时覆盖的文件。在UI中是这样显示的:
tabPanel("Liste de prix",
fluidPage(
shinyjs::useShinyjs(),
shinyjs::inlineCSS(appCSS),
fluidRow(
div(
id = "modification",
column(12,
rHandsontableOutput("hot"),
br(),
actionButton("saveBtn", "Enregistrer", icon = icon("floppy-o")))
)),
fluidRow(
shinyjs::hidden(
div(
id = "modif_reussie",
column(12,
h3("La modification a été effectuée avec succès."),
actionLink("autre_modif", "Revenir à la page")
))))
))
操作按钮 "saveBtn" 时发生错误。互动table中的代码最初来自:
https://gist.github.com/cxbonilla/f49a2c7dbcfa23e6931b83838fad892d
有人可以帮忙吗?这真的很奇怪,因为我的应用程序的另一部分实际上可以完美地读写 .csv - 无论是在我的计算机上还是在 VM 上。然而,它使用基本的 R 函数而不是 rHandsontable。所以我不太明白这里发生了什么。
谢谢!
您的闪亮服务器无权将文件保存到您想要的文件夹。 这样的事情可能会有所帮助:
sudo chown shiny:shiny /var/shiny-server/myfolder