opencpu와 SQLite는 데이터베이스에서 결과를 얻을 수 없습니다 그러나내가 SQLite는 데이터베이스에서 일부 데이터를 추출하는 비교적 간단한 기능을 가지고
> db.select(vars = c("gc_content"), rows=c(1:5))
gc_content
1 44.30
2 41.22
3 48.51
4 60.83
5 45.21
, 나는 opencpu를 통해이 기능을 사용하여 데이터를 검색하는 데 전혀 성공하지 않은 :
$ curl http://localhost/ocpu/user/bertjan/library/RParcoords/R/db.select/json -H "Content-Type: application/json" -d '{"vars":["gc_content"]}'
RS-DBI driver: (could not connect to dbname:
unable to open database file
)
In call:
sqliteNewConnection(drv, ...)
나는 파일이 존재하는지 두 번 확인하고, 권한을 확인하고, 모두에 대해 읽기/쓰기 권한을 설정했지만 운이 전혀 없다. 모든 입력을 부탁드립니다.
편집 1 : @Jeroen에서 제안한 변경 사항을 apparmor 구성으로 사용하지 않으려 고 시도했습니다. 그러나
/full/path/to/db rw,
, 그것은 단지 내가 지금 오류 얻을 SOFAR 도움 :
RS-DBI 드라이버 : 문 (오류를 조금하지만 사용자 정의 파일에 다음 줄을 추가 한 도움이 무슨 짓을했는지 : 데이터베이스 통화에서
) 잠겨 :이 오류가 발생하지 않는 이상하다
내가 정확히 실행할 때) ... sqliteExecStatement (CONN, 문, 동일한 데이터베이스 파일과 동일한 코드 (RStudio에서. 나는 (R 스튜디오에서 작동하는 동일한 동작을 얻을로, 아무 소용이,
db.select <- function(table="mydata", vars, rows=c()) {
vars <- paste(unlist(vars), collapse=", ")
q <- paste("SELECT ", vars, " FROM ", table, sep="")
if (length(rows) > 0) {
rows <- paste(as.character(rows), collapse=", ")
q <- paste(q, " WHERE row in (", rows, ")", sep="")
}
con <- DBI::dbConnect(RSQLite::SQLite(), "/home/bertjan/cstr.db")
data <- DBI::dbGetQuery(con, q)
DBI::dbDisconnect(con)
data
}
을 정지 :
편집 2 : 해들리 위컴 (https://twitter.com/hadleywickham/status/526739851974955008)에 의해 제안 된 바와 같이 나는 dbGetQuery를 사용하여 기능을 단순화 curl 명령을 발행 할 때 데이터베이스 잠김 메시지를 제공합니다).
편집 3 : 실제로는 여전히 AppArmor 문제인 것으로 보입니다. 내가 얻을 :
Oct 27 15:50:52 Stef kernel: [899068.612784] type=1400 audit(1414421452.965:232): apparmor="DENIED" operation="file_lock" profile="opencpu-exec" name="/path/to/db" pid=9708 comm="apache2" requested_mask="k" denied_mask="k" fsuid=33 ouid=1000
솔루션 :가 마지막으로 발견했다. 결국 AppArmor의 순수한 문제인 것처럼 보였습니다.
/full/path/to/db rw,
/full/path/to/db rwk,
(k 개의 주)
에 파일 잠금을 허용하기 위해 : 나는 변경했다.
작은 메모 : 의도 한 파일은 아마도 /etc/apparmor.d/opencpu/custom입니다. 포함 라인은 "#include"이라고 명시해야합니다. 그렇지 않으면 apparmor가 파일을 찾을 수 없다는 불평을합니다. –
감사합니다. 내 전화에서 SO 질문에 대답해서는 안됩니다 :) 이것이 당신의 문제를 해결 했습니까? – Jeroen
아니,하지만 그것은 올바른 방향으로 나를 가리켰다. 마지막 편집에서 언급했듯이, sqlite는 하나의 파일로 구성된 데이터베이스이므로 mysql 프로필은별로 도움이되지 않습니다. 필요한 것은 데이터베이스 파일에 대한 읽기 및 쓰기 * 및 * 잠금 액세스입니다. –