Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Timezone is unset after 2nd visit to Shiny app #3741

Closed
michael-dewar opened this issue Sep 27, 2022 · 7 comments · Fixed by rstudio/httpuv#346
Closed

Timezone is unset after 2nd visit to Shiny app #3741

michael-dewar opened this issue Sep 27, 2022 · 7 comments · Fixed by rstudio/httpuv#346

Comments

@michael-dewar
Copy link

Describe the problem

Running a Shiny app that uses bslib twice will unset my TZ environment variable. For example, when I restart my R session, Sys.getenv('TZ') shows that I have a correctly set timezone. Then if I source the following code, hit escape to stop the app, and then run the app again, then Sys.getenv('TZ') returns "".

library(shiny)

ui <- fluidPage(
	theme = bslib::bs_theme(
		version = 5,
		primary = "#002FA7"
	)
)

server <- function(input, output, session) {}

shinyApp(ui, server)

If I try this with a skeleton app without the theme then I do not have this timezone problem.

Session Info


─ Session info ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
 setting  value
 version  R version 4.2.1 (2022-06-23)
 os       macOS Monterey 12.6
 system   x86_64, darwin17.0
 ui       RStudio
 language (EN)
 collate  en_US.UTF-8
 ctype    en_US.UTF-8
 tz       Asia/Taipei
 date     2022-09-27
 rstudio  2022.07.1+554 Spotted Wakerobin (desktop)
 pandoc   NA

─ Packages ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
package * version date (UTC) lib source
brio 1.1.3 2021-11-30 [1] CRAN (R 4.2.0)
cachem 1.0.6 2021-08-19 [1] CRAN (R 4.2.0)
callr 3.7.2 2022-08-22 [1] CRAN (R 4.2.0)
cli 3.4.0 2022-09-08 [1] CRAN (R 4.2.0)
crayon 1.5.1 2022-03-26 [1] CRAN (R 4.2.0)
devtools * 2.4.4 2022-07-20 [1] CRAN (R 4.2.0)
digest 0.6.29 2021-12-01 [1] CRAN (R 4.2.0)
ellipsis 0.3.2 2021-04-29 [1] CRAN (R 4.2.0)
fastmap 1.1.0 2021-01-25 [1] CRAN (R 4.2.0)
fs 1.5.2 2021-12-08 [1] CRAN (R 4.2.0)
glue 1.6.2 2022-02-24 [1] CRAN (R 4.2.0)
htmltools 0.5.3 2022-07-18 [1] CRAN (R 4.2.0)
htmlwidgets 1.5.4 2021-09-08 [1] CRAN (R 4.2.0)
httpuv 1.6.6 2022-09-08 [1] CRAN (R 4.2.0)
later 1.3.0 2021-08-18 [1] CRAN (R 4.2.0)
lifecycle 1.0.2 2022-09-01 [1] Github (r-lib/lifecycle@f92faf7)
magrittr 2.0.3 2022-03-30 [1] CRAN (R 4.2.0)
memoise 2.0.1 2021-11-26 [1] CRAN (R 4.2.0)
mime 0.12 2021-09-28 [1] CRAN (R 4.2.0)
miniUI 0.1.1.1 2018-05-18 [1] CRAN (R 4.2.0)
pkgbuild 1.3.1 2021-12-20 [1] CRAN (R 4.2.0)
pkgload 1.3.0 2022-06-27 [1] CRAN (R 4.2.0)
prettyunits 1.1.1 2020-01-24 [1] CRAN (R 4.2.0)
processx 3.7.0 2022-07-07 [1] CRAN (R 4.2.0)
profvis 0.3.7 2020-11-02 [1] CRAN (R 4.2.0)
promises 1.2.0.1 2021-02-11 [1] CRAN (R 4.2.0)
ps 1.7.1 2022-06-18 [1] CRAN (R 4.2.0)
purrr 0.3.4 2020-04-17 [1] CRAN (R 4.2.0)
R6 2.5.1 2021-08-19 [1] CRAN (R 4.2.0)
Rcpp 1.0.9 2022-07-08 [1] CRAN (R 4.2.0)
remotes 2.4.2 2021-11-30 [1] CRAN (R 4.2.0)
rlang 1.0.6 2022-09-24 [1] CRAN (R 4.2.0)
rstudioapi 0.14 2022-08-22 [1] CRAN (R 4.2.0)
sessioninfo 1.2.2 2021-12-06 [1] CRAN (R 4.2.0)
shiny 1.7.2 2022-07-19 [1] CRAN (R 4.2.0)
stringi 1.7.8 2022-07-11 [1] CRAN (R 4.2.0)
stringr 1.4.1 2022-08-20 [1] CRAN (R 4.2.0)
testthat * 3.1.4 2022-04-26 [1] CRAN (R 4.2.0)
urlchecker 1.0.1 2021-11-30 [1] CRAN (R 4.2.0)
usethis * 2.1.6 2022-05-25 [1] CRAN (R 4.2.0)
xtable 1.8-4 2019-04-21 [1] CRAN (R 4.2.0)

[1] /Library/Frameworks/R.framework/Versions/4.2/Resources/library

─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

@cpsievert
Copy link
Collaborator

cpsievert commented Sep 27, 2022

Huh, weird, this appears to be some strange interaction with shiny....I can render a page statically without encountering the issue:

library(shiny)
library(bslib)
library(htmltools)

Sys.setenv(TZ = "America/Sao_Paulo")

ui <- fluidPage(
    theme = bs_theme(
        version = 5,
        primary = "#002FA7"
    ), 
    "Foo bar"
)

browsable(ui)

Sys.getenv('TZ')
#> [1] "America/Sao_Paulo"

@wch
Copy link
Collaborator

wch commented Sep 27, 2022

I was able to reproduce this by running the app twice. Note that, at first, TZ is not set to anything. But then after running the app twice, it is set to "".

# Initially, TZ is not set
Sys.getenv("TZ", unset = "UNSET")
#> [1] "UNSET"

# Set to some value
Sys.setenv(TZ="America/Chicago")
Sys.getenv("TZ", unset = "UNSET")
#> [1] "America/Chicago"



library(shiny)
ui <- fluidPage(theme = bslib::bs_theme())
server <- function(input, output, session) {
  stopApp()  # Close the app as soon as the browser connects
}
app <- shinyApp(ui, server)


# Run first time: No change
app
Sys.getenv("TZ", unset = "UNSET")
#> [1] "America/Chicago"


# Run second time: TZ is set to ""
app
Sys.getenv("TZ", unset = "UNSET")
#> [1] ""

@wch
Copy link
Collaborator

wch commented Sep 27, 2022

I'm also finding that:

  • This happens only when using bslib.
  • The un-setting happens very late: after Shiny calls renderPage() but before it executes the server function (when the browser connects).
  • If no browser visits the app (by launching the app with runApp(app, launch.browser = F)), then TZ does not get unset.

The fact that it happens on the second visit makes me wonder if it has something to do with bslib or sass's caching mechanism.

@cpsievert
Copy link
Collaborator

FWIW, it doesn't seem related to caching since I can repro with setting options(sass.cache = F) and/or shiny::devmode(F)

@cpsievert
Copy link
Collaborator

cpsievert commented Nov 28, 2022

After some more investigation, It appears as though this issue is not specific to bslib (or sass). It can be reproduced with a fairly simple htmlDependency():

library(shiny)
library(htmltools)

Sys.getenv("TZ", unset = "UNSET")
#> [1] "UNSET"

Sys.setenv(TZ = "America/Chicago")

writeLines("body{background: red}", "styles.css")
dep <- htmlDependency(
  "foo", "1.0",
  src = getwd(),
  stylesheet = "styles.css",
  all_files = FALSE
)

app <- shinyApp(div(dep), \(...) stopApp())

app
Sys.getenv("TZ", unset = "UNSET")
#> [1] "America/Chicago"

app
Sys.getenv("TZ", unset = "UNSET")
#> [1] ""

@cpsievert
Copy link
Collaborator

It also appears as though this issue was introduced by #2280 (cc @wch), so a fix will likely have to come via shiny (and/or httpuv)

@cpsievert cpsievert changed the title bslib is unsetting my timezone Timezone is unset after 2nd visit to Shiny app Nov 28, 2022
@cpsievert cpsievert transferred this issue from rstudio/bslib Nov 28, 2022
@cpsievert
Copy link
Collaborator

netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this issue Mar 12, 2023
# httpuv 1.6.9

* Fixed #354: The incorrect method was called to clear a `vector`. (#355)

* The `src/Makevars` file no longer sets `CXX_STD=CXX11`, and the
  `DESCRIPTION` file no longer lists `SystemRequirements: C++11`,
  because newer R versions always support C++11. (#356, #357)


# httpuv 1.6.8

* Fixed #351: A race condition could cause httpuv to crash when
  starting the background thread for I/O. (#352)


# httpuv 1.6.7

* Fixed rstudio/shiny#3741: The `TZ` environment variable could get
  unset in some cases. (#346)

* Closed #302: Fixed potential thread-safety issues with `timegm2`
  implementation. (#346)


# httpuv 1.6.6

* Update docs for CRAN (#343)

* Updated to libuv 1.43.0. (#328)

* Fixed #336: `encodeURI()` and `encodeURIComponent()` printed a space
  instead of a leading zero, as in `"% A"` instead of `"%0A"`. (#337)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants