2012-05-16 2 views
0

우분투에서 실행되는 Ruby on Rails 애플리케이션을 얻으려고합니다. Xapian을 사용하여 문서를 검색합니다. 이미 xapian-full Gem 파일을 Gemfile의 지시에 따라 1.1.3.4 버전으로 설치했고 Xapian 데이터베이스가있는 디렉토리 files/default을 만들었습니다.Ruby on Rails에서 Xapian 실행하기 : 데이터베이스 유형을 찾을 수 없습니다.

database = Xapian::Database.new('files/default'); 
즉시 코드는 다음 라인으로 실행되는 오류가

:

IOError in SearchController#index

DatabaseOpeningError: Couldn't detect type of database

나는 데이터베이스 또는 뭔가를 초기화해야합니까? 나는 Xapian Docs를 보았고 인터넷에서 오류 메시지를 찾았지만 실제로는 도움이되지 않았다.

답변

0

(이 답변을 Xapian에 대한 지식으로 작성했지만 xapian-full Gem이 아니라 일부 세부 사항이 잘못 될 수 있습니다. 그러나 오류는 Xapian에서 비롯된 것이므로 올바른 줄에 있다고 확신합니다.)

files/default 디렉토리를 생성했기 때문에 오류가 발생했습니다. 대신 files 디렉토리를 만들고 Xapian을 실행하는 프로세스에 해당 디렉토리에 쓸 수있는 권한이 있는지 확인하십시오.

왜 여기에 Xapian에서 오류가 발생합니까? 왜냐하면 Xapian 데이터베이스는 특별한 파일 세트가 들어있는 디렉토리로만 구성되기 때문입니다. Xapian::Database.new이 호출되면 새 데이터베이스를 만들기 전에 데이터베이스가 이미 있는지 확인합니다. 기본 열기 모드에서 데이터베이스 디렉토리가 이미 존재하면 기존 데이터베이스를 열려고 시도하기 때문에 새 데이터베이스가있는 디렉토리를 덮어 쓰지 않아야한다고 가정합니다. 디렉토리가 비어 있기 때문에 표시되는 오류가 발생합니다.

+0

주셔서 감사합니다. 슬프게도 이것은 오류 메시지를 다른 것으로 변경합니다 :'DatabaseOpeningError : 'files/default'를 stat 할 수 없습니다''stat'가 의미하는 바가 없습니다. 그 이유가 무엇인지 또 다른 생각이 있습니까? – YMMD

+0

루비 내에서 스택 추적은 무엇입니까? C++ 라이브러리에서'Xapian :: Database' 객체를 생성하는 방법은 다양합니다. 사용하는 코드 경로 ('Xapian :: Database.new')에'xapian-full'에서 사용 된 접근 방식은 그것이하려고하는 것. 짐작할 수 있겠지만, 기존 데이터베이스를 열려고 시도하고 있지만 원래는 시도했던 것처럼 빈 디렉토리가없는 방법도 없습니다. 따라서 먼저 사용해야하는 새 데이터베이스를 만드는 또 다른 방법이있을 수 있습니다. –

+0

스택 트레이스는 제 Xapian :: Database.new 함수 호출에서 시작하여 그 사이에 아무 것도 쓰지 않고 따옴표 붙은 에러 메시지로 끝납니다. 그것은 Xapian에서 직접 온 것입니다. 어쨌든, 지금 바로 고쳤습니다. 오류는 색인이 제대로 생성되지 않았다는 것입니다. 나는 이것을 omindex를 사용하여 수동으로했는데 이제 모든 것이 예상대로 작동합니다. 당신의 대답이 원래의 질문에 답하기 때문에 나는 그것을 받아 들일 것입니다. 두 분 모두 저를 도와 주셔서 감사합니다! – YMMD

관련 문제