web-dev-qa-db-ja.com

光沢のあるアプリをパッケージとして開発し、光沢のあるサーバーに展開する

私は光沢のあるアプリを開発しています。関数の自動テストとドキュメントを使用したかったので、パッケージ内のインターフェイスの開発を開始しました(推奨 here )。

私はRStudio内でこの光沢のあるアプリを開発し、server.Rファイルを持っています。これをRStudio内のRun Appボタンをクリックすると、すべてが機能します。パッケージをgithubリポジトリーにコミットし、この時点からdevtoolsおよびinstall_github関数を使用してパッケージをR光沢のあるサーバーにインストールします。

今、サーバー内でアプリを起動する方法を考えています。私はパッケージをインストールし、server.Rファイルを指すように単純に考えていましたが、これはどういうわけか機能していません。問題がどこにあるのかわからない。

私の2番目の試みは、光沢のあるサーバーからアクセスできるフォルダーにapp.Rというファイルを作成することでした。このファイルでは、基本的にパッケージ、光沢のあるパッケージ、その他の必要なパッケージを読み込みますが、変数がないためになんらかの問題があります.

誰かが私にアドバイスを与えることはできますか?この問題を適切に尋ねる方法がわからないので、どんな質問にも喜んで答えます。前もって感謝します。

EDIT光沢のあるサーバーへの展開

Colin Dはこれらのパッケージを光沢のあるサーバーにデプロイする方法をコメントで尋ねていたので、これをどのように行うかをデモンストレーションしたいと思いました。

まず、次のコマンドを使用して、rootとしてコマンドラインから直接パッケージを光沢のあるサーバーにインストールします。

su - -c "R -e \"devtools::install_github('user/shinypackage')\"" 

次のステップは、パッケージフォルダーの所有者を変更することです

chown -R shiny:shiny /usr/local/lib/R/site-library/shinypackage/

次に、キャッシュに問題があったため、光沢のあるサーバーを再起動します。

systemctl restart shiny-server

これらは、光沢のあるアプリを更新するときに行う手順です。私は通常これを1行のrootとしてもう一度行います

su - -c "R -e \"devtools::install_github('user/shinypackage')\"" &  chown -R shiny:shiny /usr/local/lib/R/site-library/shinypackage/ & systemctl restart shiny-server

まだやらなければならないことの1つは、shiny-server.confファイルにディレクトリを設定することです。パッケージパスと、ui.Rおよびserver.Rが保存されているアプリケーションディレクトリを追加しました。

  location /shinypackage {
    app_dir /usr/local/lib/R/site-library/shinypackage/application;
    log_dir /var/log/shiny-server;
  }

次に、systemctl restart shiny-serverを使用してサーバーを再起動する必要があります。

これはUbuntuサーバーで使用されています。

30
drmariod

光沢のあるアプリケーションをスタンドアロンパッケージとして作成する場合、通常は次のようにファイルを編成します。

Rディレクトリ:

  • アプリケーションをサポートするためのすべてのメソッド(これらのメソッドをui.Rserver.R、またはglobal.Rファイルで使用する場合は、エクスポートする必要があります)
  • launch_application関数

launch_applicationの定義は次のようになります。

launch_application <- function(x, ...)
{
  shiny::runApp(appDir = system.file("application", package = [my_pkg]),
                ...)
}

Instディレクトリ

  • application/server.R
  • application/ui.R
  • application/global.R

パッケージをビルドしてインストールした後、実行するだけです

library(my_pkg)
launch_application(...)
24
Benjamin

すでに多くの投票で認められた回答がありますが、いくつか追加したいので、私も回答します。詳細については、私の記事 RパッケージにShinyアプリを追加する を参照してください。

これは私が使用するフォルダー構造です:

- mypacakge
  |- inst
      |- myapp
         |- ui.R
         |- server.R
  |- R
     |- runApp.R
     |- ...
  |- DESCRIPTION
  |- ...

内部R/フォルダは、光沢のないコードをすべて配置する場所です。光沢のあるアプリ自体のコードはinst/R/runApp.Rファイルは次のように定義されます

#' @export
runExample <- function() {
  appDir <- system.file("myapp", package = "mypackage")
  if (appDir == "") {
    stop("Could not find myapp. Try re-installing `mypackage`.", call. = FALSE)
  }

  shiny::runApp(appDir, display.mode = "normal")
}

(あなたはこれを実際に見ることができます;例えば shinyalert はそのデモアプリにこの構造を使用しています)。

コメントで、これを光沢のあるサーバーにデプロイする方法を尋ねました。それは簡単です、あなたは単にファイルを持つことができます/srv/shiny-server/myapp.app.Rそのパッケージを呼び出して実行します(サーバーにパッケージをインストールした後):

dir <- system.file("myapp", package = "mypackage")
setwd(dir)
shiny::shinyAppDir(".")

(あなたはこれも実際に見ることができます、コード here

12
DeanAttali

概念実証のShinyデモを含む多くのパッケージは、Shiny Serverでのデプロイメント用に設計されていませんが、代わりに、RStudioから実行することを意図した関数に次のようなものを含めます。

fooRun <- function() {
   app <- shinyApp(appUI, appServer)
   runApp(app, launch.browser = TRUE, ...)
}

この関数はShiny Serverでは機能しません(runApp内でrunAppを実行することはできません)が、プレースホルダーとして機能するapp.Rを作成する方法についての手掛かりを与えますで使用 /srv/shiny-server/foo/app.R

library("foo")
shinyApp(ui = foo:::appUI, server = foo:::appServer)
0
Jeremy Leipzig