ui 和服务器脚本作为一个脚本运行,运行良好。但是在不同的文件 ui.R 和 server.R 中运行脚本会引发错误

Posted

技术标签:

【中文标题】ui 和服务器脚本作为一个脚本运行,运行良好。但是在不同的文件 ui.R 和 server.R 中运行脚本会引发错误【英文标题】:ui and server script running as one script working fine. However running script in different file ui.R and server.R throws error 【发布时间】:2019-12-31 16:40:22 【问题描述】:

我想在单独的文件中运行 ui.R 脚本和 server.R 脚本并一起运行以在闪亮的服务器上发布。 但抛出错误: “serverFuncSource() 中的错误: server.R 返回了一个意外类型的对象:list"

参考链接: I want to render website through login page in shinyApp

我参考了上面的链接来运行脚本并在 shinyserver 中发布。 在单个脚本中运行 ui 和服务器时,我无法发布它。 所以,我想将 ui 脚本和服务器脚本拆分为单独的文件,并将其发布到闪亮的服务器中。

【问题讨论】:

【参考方案1】:

尝试如下分离。

global.R 文件:

library(shiny)
library(shinyauthr)
library(shinyjs)

# dataframe that holds usernames, passwords and other user data
user_base <- data.frame(
    user = c("user1", "sr1"),
    password = c("pass1", "USR@1"), 
    permissions = c("admin", "standard"),
    name = c("User One", "User Two"),
    stringsAsFactors = FALSE,
    row.names = NULL
)

jscode <- "
shinyjs.hrefAuto = function(url)  window.location.href = url;;
"

ui.R 文件:

ui <- fluidPage(
    # must turn shinyjs on
    shinyjs::useShinyjs(),
    extendShinyjs(text = jscode, functions = "hrefAuto"),
    # add logout button UI 
    div(class = "pull-right", shinyauthr::logoutUI(id = "logout")),
    # add login panel UI function
    shinyauthr::loginUI(id = "login"),
    # setup table output to show user info after login
    #tableOutput("user_table")
    uiOutput("hptm")
)

server.R 文件:

server <- function(input, output, session) 

    # call the logout module with reactive trigger to hide/show
    logout_init <- callModule(shinyauthr::logout, 
                              id = "logout", 
                              active = reactive(credentials()$user_auth))

    # call login module supplying data frame, user and password cols
    # and reactive trigger
    credentials <- callModule(shinyauthr::login, 
                              id = "login", 
                              data = user_base,
                              user_col = user,
                              pwd_col = password,
                              log_out = reactive(logout_init()))

    # pulls out the user information returned from login module
    user_data <- reactive(credentials()$info)

    #output$user_table <- renderTable(
    # use req to only render results when credentials()$user_auth is TRUE
    output$hptm <- renderUI(req(credentials()$user_auth)
        js$hrefAuto('https://***.com'))

【讨论】:

以上是关于ui 和服务器脚本作为一个脚本运行,运行良好。但是在不同的文件 ui.R 和 server.R 中运行脚本会引发错误的主要内容,如果未能解决你的问题,请参考以下文章

如果我的 python 脚本作为 python script.py 运行,但当作为 ./script.py 运行时,我的 python 脚本运行良好 [重复]

用于删除或存档旧日志文件的 PowerShell 脚本在本地运行良好,但在远程位置无法运行

将脚本作为计划任务运行时出现“找不到路径”

作为服务运行时未找到 ODBC Lib

从命令行运行但不能通过 cron 运行时脚本运行良好

如何使用用户输入作为参数运行 .py 脚本