R と Rook を使用して Web アプリケーションを作成しようとしています。
この例を見ましたhttp://www.road2stat.com/cn/r/rook.htmlそして、コマンドラインでそれを複製することができました(R内から呼び出します)。しかし、複数のユーザーが同時にアプリに接続できるようにしたいので、ジェフがここで言ったように展開したいと思います - http://jeffreyhorner.tumblr.com
Jeff が彼のブログで述べたように、Rook パッケージに付属するサンプルのほとんどを複製することができました。これらには以下が含まれます: summary.r rnorm RookTestApp
私が今抱えている問題は、前の例を機能させることができないことです (つまり、-www.road2stat です)。ファイルをアップロードしようとするたびに、エラー メッセージが表示されます。コマンドラインを使用する場合、これは発生しません。
私のエラーメッセージは次のようなものです:
内部サーバー エラー サーバーで内部エラーまたは構成ミスが発生したため、要求を完了できませんでした。
これは、アプリをデプロイするためのパスです
<Location /test/Visbin>
SetHandler r-handler
RFileEval /usr/lib/R/library/Rook/exampleApps/visbin.R:Rook::Server$call(newapp)
</Location>
これは私が複製しようとしているアプリです
newapp = function(env) {
req = Rook::Request$new(env)
res = Rook::Response$new()
res$write('Choose a Binary file to Train:\n')
res$write('<form method="POST" enctype="multipart/form-data">\n')
res$write('<input type="file" name="data">\n')
res$write('xdim:\n')
res$write('<form method="POST">\n')
res$write('<input type="text" name="xdim" value="12">\n')
res$write('ydim:\n')
res$write('<form method="POST">\n')
res$write('<input type="text" name="ydim" value="25">\n')
res$write('ncolors:\n')
res$write('<form method="POST">\n')
res$write('<input type="text" name="ncolors" value="8">\n')
res$write('<input type="submit" name="Go!">\n</form>\n<br>')
myNormalize = function (target) {
return((target - min(target))/(max(target) - min(target)))
}
if (!is.null(req$POST())) {
data = req$POST()[["data"]]
hash = digest(data$tempfile, algo = "md5", file = TRUE)
destFile = file(data$tempfile, "rb")
k = floor((file.info(data$tempfile)$size/16)) - 2
doneFile = readBin(con = destFile, what = "raw", n = 2 * 8 * k)
close(destFile)
tmpFile0 = rbind(doneFile[seq(1, (2 * 8 * k) - 1, 2)], doneFile[seq(2, (2 * 8 * k), 2)])
tmpFile1 = paste(tmpFile0[1, ], tmpFile0[2, ], sep = "")
initMat = matrix(strtoi(tmpFile1, 16L), ncol = 8, byrow = TRUE)
normMat = myNormalize(initMat)
trainedSOM = kohonen::som(normMat, grid = somgrid(xdim = req$POST()[["xdim"]], ydim = req$POST()[["ydim"]], "hexagonal"))
png(paste("/tmp/", hash, ".png", sep = ""))
plot(trainedSOM, type = "dist.neighbours", palette.name = rainbow, ncolors = as.numeric(req$POST()[["ncolors"]]), main = "")
dev.off()
res$write(paste("<img src='", s$full_url("pic"), "/", hash, ".png'", " />", sep = ""))
}
res$finish()
}
そして、これは私のコマンドライン命令です:
s = Rhttpd$new()
s$add(app = newapp, name = "visbin")
s$add(app = File$new("/tmp"), name = "pic")
s$start()
s$browse("visbin")
誰かが私を正しい方向に向けるか、それを行うのに役立つリソースに私を案内してください.
PS 私は fedora 15 を使用しており、Rapache-1.2.0 がインストールされています。