2013-10-20 78 views

回答

1

編輯:此功能已在opencpu.js 0.3中得到了改進。您現在可以使用`opencpu.seturl()設置opencpu服務器的路徑。參數必須指向一個包,例如:

opencpu.seturl("/ocpu/library/mypackage/R") 

,或者如果你的瀏覽器支持CORS你可以這樣做:

opencpu.seturl("//public.opencpu.org/ocpu/library/mypackage/R") 

opencpu.seturl("//public.opencpu.org/ocpu/github/yourname/yourpackage/R") 

設置在此之後,客戶端將檢查這個服務器是否在線,並打印一些調試的東西到JavaScript控制檯。如果一切正常,您可以使用庫,就像它是應用程序的一部分一樣。看看http://www.stat.ucla.edu/~jeroen/appdemo/看到這個在行動。

也就是說,opencpu.js庫被設計爲包含在應用程序中。 OpenCPU應用程序是一個R包,它包含一些使用OpenCPU API調用包中的R函數的網頁。

因爲應用程序是已經安裝到OpenCPU服務器上R封裝,所述opencpu.js文庫假定服務器的當前主機上運行,​​並且使用相對路徑來調用服務器。此外,由於opencpu.js包含在特定的R程序包中,所以opencpu.js中的函數對於指定程序包沒有任何參數:它假定您正在調用R函數當前的程序包

這聽起來有點讓人困惑,但相對路徑對於保持應用程序的可移植性非常重要。例如,在相同的應用程序應該無論工作是否託管爲:

https://public.opencpu.org/ocpu/gitstats/www 
https://public.opencpu.org/ocpu/github/SChamberlain/gitstats/www/ 
https://public.opencpu.org/ocpu/user/jeroen/library/gitstats/www/ 

這種設計的最大好處是,你的[R包將是一個自包含的,獨立的應用程序,它可以在任何地方簡單地部署通過安裝包裝。這可以避免跨域請求和軟件版本控制帶來的麻煩。由於您的網頁和R功能是同一個軟件包的一部分,因此您可以確保js和R代碼包含兼容版本。如果您要在單獨的服務器上託管js,那麼安裝新版本的R包時可能會中斷服務。

也許最好的入門方法是看看其中一個public apps。這些應用程序的源代碼可在opencpu github repo上找到,每個應用程序都建立在opencpu.js庫上。

+0

感謝您的回覆。你所描述的是有道理的。但是,這不是我們如何使用OpenCPU。事實上,我們正是在'1.2在一個團隊中使用OpenCPU'中描述的。我們有數據分析人員編寫所有的R並部署到我們的OpenCPU服務器,我們有編寫JavaScript並部署到不同服務器的Web程序員。我們喜歡獨立更新+部署JavaScript和R.保持JavaScript與R之間的契約並不是問題。但是,我們正在開發自動化測試來驗證這是否可以確保。 –

+0

我更新了答案。如果您向我發送電子郵件,我很樂意討論您的使用案例並提供更具體的建議。 – Jeroen