2015-06-21 9 views
6

Ich versucheErstellen von Stand-alone-Shiny App - Chrome Fehler

eine glänzende Desktop-Anwendung nach der Anweisung von dieser sehr schönen Blog-Post ( http://www.r-bloggers.com/deploying-desktop-apps-with-r/) im Grunde

Also erstelle ich einen Ordner mit der folgenden Struktur:

App 
|__ GoogleChromePortable 
    |__ App 
    |__ Data 
    |__ ... 
|__ R Portable 
    |__ App 
    |__ Data 
    |__ ... 
|__ shiny 
    |__ ui.R 
    |__ server.R 
    |__ ... 
|__ LAUNCH.bat/LAUNCH.vbs 
|__ runShinyApp.R 

ich schaffe 2 verschiedene Versionen, eine mit und eine ohne GoogleChromePortable. Beide Versionen sind genau die gleichen abgesehen von dem Weg in runShinyApp.R Chrome.

runShinyApp.R:

# checking if correct library paths are being used (only portable one!) 
message('library paths:\n', paste('... ', .libPaths(), sep='',  collapse='\n')) 

# both chromes work! 
chrome.sys = 'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe' 
chrome.portable = file.path(getwd(), 
         'GoogleChromePortable/App/Chrome-bin/chrome.exe') 

launch.browser = function(appUrl, browser.path=chrome.portable) { 
message('Browser path: ', browser.path) 
shell(sprintf('"%s" --app=%s', browser.path, appUrl)) 
} 

shiny::runApp('./shiny/', launch.browser=launch.browser) 

Die App über eine .bat oder .vbs Datei gestartet wird, die im Grunde die gleichen sind, aber für die Tatsache, dass Sie die erste Kommandant Aufforderungsfenster offen lässt.

LAUNCH.bat:

SET ROPTS=--no-save --no-environ --no-init-file --no-restore --no-Rconsole 
R-Portable\App\R-Portable\bin\Rscript.exe %ROPTS% runShinyApp.R 1> ShinyApp.log 2>&1 

LAUNCH.vbs:

Rexe   = "R-Portable\App\R-Portable\bin\Rscript.exe" 
Ropts   = "--no-save --no-environ --no-init-file --no-restore --no- Rconsole" 
RScriptFile = "runShinyApp.R" 
Outfile  = "ShinyApp.log" 
strCommand  = Rexe & " " & Ropts & " " & RScriptFile & " 1> " & Outfile & " 2>&1" 

intWindowStyle = 0  ' Hide the window and activate another window.' 
bWaitOnReturn = False ' continue running script after launching R ' 

' the following is a Sub call, so no parentheses around arguments' 
CreateObject("Wscript.Shell").Run strCommand, intWindowStyle, bWaitOnReturn 

Ausgabe:

Die Frage, die ich in beiden Versionen wird erscheinen habe und ist die folgende.

Hab ich meine normalen Chrome gestartet (NICHT die portable Version) auf meinem System installiert, startet die glänzende App ohne Probleme. Es öffnet sich ein neues Fenster vollständig nur die glänzende App enthält.

Allerdings, wenn ich nicht habe eine Chrome-Sitzung geöffnet (Standard eins), scheinen keine der beiden Versionen der glänzend. Ein Fenster öffnet sich, aber lädt für immer. an den erstellten Protokollen der Suche, bekomme ich folgende Fehlermeldung:

[4092:3596:0621/154834:ERROR:url_pattern_set.cc(240)] Invalid url pattern: chrome://print/* 
[4092:3596:0621/154834:ERROR:bluetooth_adapter_win.cc(102)] NOT IMPLEMENTED 

Jede Idee, was das Problem hier zu sein scheint?

+0

Ich sah nie diese Methode der Bereitstellung von glänzenden Apps: Sie können auch GitHub Pakete in das remotes Argument enthalten. Sie wissen, dass Sie shinyapps.io verwenden können oder einfach Ihren eigenen glänzenden Server verwenden, richtig? Ihren eigenen glänzenden Server zu hosten ist sehr einfach, ich habe eine schöne Reihe von Anweisungen, wenn Sie brauchen –

+0

Vielen Dank für Ihren Kommentar. Ich bin mir der anderen Möglichkeiten der Shiny-Bereitstellung bewusst. Aber für unser Projekt möchten wir auch die glänzende App mit anderen teilen, damit sie ihre eigene Laptop-Verarbeitungsleistung nutzen können, aber immer noch ohne den Aufwand, irgendetwas zu installieren. – Ewoud

+0

@daattali könnten Sie diese Anweisungen posten oder verlinken? –

Antwort

5

Ich habe es auf diese Weise mit ein paar Änderungen zu lösen run.vbs und runShinyApp.R.

run.vbs:

Rexe   = "R-Portable\App\R-Portable\bin\R.exe CMD BATCH" 
Ropts   = "--no-save --no-environ --no-init-file --no-restore --no-Rconsole " 
RScriptFile = "runShinyApp.R" 
Outfile  = "ShinyApp.log" 
startChrome = "GoogleChromePortable\Chrome\chrome.exe --app=http://127.0.0.1:7777" 
strCommand  = Rexe & " " & Ropts & " " & RScriptFile & " 1> " & Outfile & " 2>&1" 

intWindowStyle = 0  ' Hide the window and activate another window.' 
bWaitOnReturn = False ' continue running script after launching R ' 

' the following is a Sub call, so no parentheses around arguments' 

CreateObject("Wscript.Shell").Run strCommand, intWindowStyle, bWaitOnReturn 
CreateObject("Wscript.Shell").Run startChrome, intWindowStyle, bWaitOnReturn 

ich hinzugefügt, um die startChrome Variable und rufen CreateObjectnach starte ich den Server, weil sonst keine Website gibt es und Chrome nachladen nicht automatisch, wenn Sie es später starten . Normalerweise sollte der Server schnell genug gestartet werden, aber wenn Sie auf einem sehr langsamen Rechner arbeiten, kann es zu lange dauern. Dann brauchen Sie eine Verzögerung zwischen den beiden CreateObject Anrufe hinzuzufügen.

Die --app Einstellung öffnet die App in einem Fenster, das nicht alle Google Chrome Tasten hat und dann wie eine Standalone-Anwendung sieht es wirklich.

runShinyApp.R:

require(shiny) 
shiny::runApp('./shiny/',port=7777) 

Port 7777 ist frei wählbar, können Sie jede kostenlos Port Sie mögen. Der Port muss in allen Dateien gleich sein.

Falls Sie eine Fledermaus-Datei verwenden:

SET ROPTS=--no-save --no-environ --no-init-file --no-restore --no-Rconsole 
start /b GoogleChromePortable\Chrome\chrome.exe --app=http://127.0.0.1:7777 
R-Portable\App\R-Portable\bin\R.exe CMD BATCH %ROPTS% runShinyApp.R 1> ShinyAppOut.log 2> ShinyAppMsg.log 
+0

Vielen Dank sehr viel! Diese Lösung funktioniert gut! – Ewoud

+0

Verena, hast du deinen Code in einem Mac getestet oder kannst du mich bitte auf eine Ressource verweisen, die für die Entwicklung eines eigenständigen Programms für einen Mac nützlich sein kann? – bonCodigo

+1

@bonCodigo Soweit ich weiß, läuft R Portable nur unter Windows. Zumindest als ich dieses Projekt gemacht habe, war es nur unter Windows möglich. Ich würde es gerne sehen, dass es auch auf Linux oder Mac funktioniert! Wenn Sie eine portable R-Version für Mac finden, sollte es möglich sein, dieselben Schritte zu befolgen. –

3

ich von der Nutzung der tragbaren Version von Chrome weg bewegt, weil Fragen wie diese während der Entwicklung des RInno-Paket, das auf Dr. basiert Lee Pangs DesktopDeployR-Framework. Das Paket hilft dabei, dies zu automatisieren und beinhaltet Inno Setup-Installer, so dass nicht-technische Benutzer Ihre Shiny-Apps installieren und verwenden können.

Um loszulegen:

install.packages("RInno") 
require(RInno) 
RInno::install_inno() 

Dann müssen Sie einen Installationsrahmen nur zwei Funktionen aufrufen zu erstellen:

create_app(app_name = "myapp", app_dir = "path/to/myapp") 
compile_iss() 

Wenn Sie R möchten für Ihre Mitarbeiter zählen, die don ‚t es installiert haben, fügen sie include_R = TRUE zu create_app:

create_app(app_name = "myapp", app_dir = "path/to/myapp", include_R = TRUE) 

Es enthält standardmäßig "shiny", "magrittr" und "jsonlite". Wenn Sie also andere Pakete wie ggplot2 oder plotly verwenden, fügen Sie sie einfach zum Argument pkgs hinzu.

create_app(
    app_name = "myapp", 
    app_dir = "path/to/myapp" 
    pkgs  = c("shiny", "jsonlite", "magrittr", "plotly", "ggplot2"), 
    remotes = c("talgalili/installr", "daattali/shinyjs")) 

Wenn Sie Interesse an weiteren Funktionen Besuche FI Labs - RInno

+0

Kann ich mit RInno immer noch "Full" Standalone mit ChromePortable oder etwas Ähnlichem machen (zumindest ein neues Browserfenster ohne Balken)? Wenn das so ist, wie? – trybik

+0

Noch nicht, aber das ist ein guter Vorschlag. Fühlen Sie sich frei, eine Feature-Anfrage an https://github.com/ficonsulting/RInno/issues –

+0

getan: https://github.com/ficonsulting/RInno/issues/21 – trybik