私は光沢のあるアプリを開発しています。関数の自動テストとドキュメントを使用したかったので、パッケージ内のインターフェイスの開発を開始しました(推奨 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サーバーで使用されています。
光沢のあるアプリケーションをスタンドアロンパッケージとして作成する場合、通常は次のようにファイルを編成します。
Rディレクトリ:
ui.R
、server.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(...)
すでに多くの投票で認められた回答がありますが、いくつか追加したいので、私も回答します。詳細については、私の記事 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 )
概念実証の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)