복붙노트

[RUBY-ON-RAILS] 루비 : sqlite3를 :: BusyException : 데이터베이스가 잠겨 있습니다 :

RUBY-ON-RAILS

루비 : sqlite3를 :: BusyException : 데이터베이스가 잠겨 있습니다 :

오늘 밤을 개발하는 동안이 오류 메시지에 란 : sqlite3를 :: BusyException : 데이터베이스가 잠겨 있습니다 :

나는 두 가지 모델이있다 :

팟 캐스트를 만들려면 :

나는 JSON 피드이 팟 캐스트에 속하는 트랙의 이름 (예술가)를 자세히 있다는 사실을 활용하는 내 레일 애플 리케이션을 얻기 위해 노력하고있어.

나는 우리가 새로운 팟 캐스트를 만들 때마다 다음과 같은 before_validation 방법은 자동으로 모든 관련 트랙을 만들 것이라고 생각했다.

class Podcast < ActiveRecord::Base
  attr_accessible :mixcloud_url, :lots, :of, :other, :attrs
  has_many :tracks    
  before_validation :create_tracks
  def create_tracks
    json = Hashie::Mash.new HTTParty.get(self.json_url)    
    json.sections.each do |section|
      if section.section_type=="track"
          Track.create(:name=>section.track.name, :podcast_id=>self.id)
      end
    end             
  end
end

나는이 라운드를 어떻게받을 수 있나요? 그것은 레일 (또는 sqlite3를)처럼 보이는 날이 방법으로 연관된 모델의 새로운 인스턴스를 생성 좋아하지 않는다. 어떻게하면 다른 할 수 있습니까? 나는 많이가 sqlite3를 하나로 문제를 레일로이 의심. 이 거 도움이 있다면 나는 더 많은 코드를 게시 할 수 있습니다.

해결법

  1. ==============================

    1.다른 레일 콘솔이 열려있을 때 SQLite는 개발에 잠금 장치가있는이 문제가 발생한 사람의 경우,이 시도 :

    다른 레일 콘솔이 열려있을 때 SQLite는 개발에 잠금 장치가있는이 문제가 발생한 사람의 경우,이 시도 :

    그냥 다음을 실행합니다 :

    ActiveRecord::Base.connection.execute("BEGIN TRANSACTION; END;")
    

    어쨌든 나를 위해, 콘솔이 데이터베이스를 백업에 해방됩니다 잡고되었다는 거래를 취소 나타납니다.

    자주 거래를 마감에 실패 할 것 delayed_job을 실행할 때 나를 위해, 특히 문제가된다.

  2. ==============================

    2.SQLite는 정말 당신이 여기에 실행중인 문제가 동시 액세스에 사용되는 안된다. 이 경우에 당신을 위해 해결 될 수있다 당신의 database.yml을 파일에 제한 시간을 늘려보십시오 수 있습니다. 그러나, 나는 당신이 MySQL의 또는 pgSQL의 같은 다중 연결을 지원하는 다른 데이터베이스로 전환에게 추천 할 것입니다.

    SQLite는 정말 당신이 여기에 실행중인 문제가 동시 액세스에 사용되는 안된다. 이 경우에 당신을 위해 해결 될 수있다 당신의 database.yml을 파일에 제한 시간을 늘려보십시오 수 있습니다. 그러나, 나는 당신이 MySQL의 또는 pgSQL의 같은 다중 연결을 지원하는 다른 데이터베이스로 전환에게 추천 할 것입니다.

  3. ==============================

    3.나를 위해 ... 내가 가진 문제는 레일 콘솔 내가 잠시 SQLite는과의 연결을 고정 된 오픈 한 듯이었다.

    나를 위해 ... 내가 가진 문제는 레일 콘솔 내가 잠시 SQLite는과의 연결을 고정 된 오픈 한 듯이었다.

    내가 그 콘솔을 종료하고, 내 웹 서버 (얇은)를 다시 시작 그래서 일단은 완벽했다.

    나는 trisweb의 제안 @ 시도했지만 나를 위해 작동하지 않았다.

  4. ==============================

    4.나도 같은 있었다

    나도 같은 있었다

    발행물. 나는 주변에 구글에있는 모든 방법을 시도하고 난 실패했습니다. 내가 SQLite는 데이터베이스 브라우저를 닫을 때 문제는 나를 위해 해결되었다.

  5. ==============================

    5.만들기 확실히 당신이 경비 또는 실행중인 여러 콘솔이 없습니다. 당신이 만드는하려면 확인 필사적으로 위의 "아니오 이름의"대답을 참조하십시오.

    만들기 확실히 당신이 경비 또는 실행중인 여러 콘솔이 없습니다. 당신이 만드는하려면 확인 필사적으로 위의 "아니오 이름의"대답을 참조하십시오.

    당신은 또한 증가 풀을 시도 할 수 있습니다 :

    예를 들어 : 당신의 설정 / database.yml을 아래와 같이 변화의 시험 부

    test:
        adapter: sqlite3
        database: db/test.sqlite3
        pool: 50
        timeout: 5000
    
  6. ==============================

    6.아마 당신은 당신이 그것을 (CTRL + D)을 닫아야 그렇다면 레일이 다른 배쉬에서 열린 콘솔이있다.

    아마 당신은 당신이 그것을 (CTRL + D)을 닫아야 그렇다면 레일이 다른 배쉬에서 열린 콘솔이있다.

  7. ==============================

    7.실제로 나를 위해, 나는 레일이 문제를 해결하는 데 도움이 살인 발견했다.

    실제로 나를 위해, 나는 레일이 문제를 해결하는 데 도움이 살인 발견했다.

    지속적인 레일 ID를 처리 찾아 | "GREP 레일 추신 AUX"를 사용합니다. 다음 사용

    "kill -9 [rails-pid]"
    

    프로세스를 종료합니다.

    그 다음은 작동합니다

  8. ==============================

    8.그것은 가장 가능성이 레일 코드 관련이 없습니다. 동시에 샌드 박스 옵션 (콘솔 --sandbox 레일) 콘솔은 기본적으로 롤백 모든 것을 종료를 기다리고 있기 때문에, SQLite는과 체계적인 문제를 만드는을 가진 콘솔을 사용하여.

    그것은 가장 가능성이 레일 코드 관련이 없습니다. 동시에 샌드 박스 옵션 (콘솔 --sandbox 레일) 콘솔은 기본적으로 롤백 모든 것을 종료를 기다리고 있기 때문에, SQLite는과 체계적인 문제를 만드는을 가진 콘솔을 사용하여.

    @trisweb에서 위의 솔루션이 경우에 작동하지만 콘솔을 종료하지 않습니다 것입니다.

  9. ==============================

    9.내 문제는 : 나는 "SQLite는 대한 DB 브라우저"라는 이름의 데이터베이스 관리 프로그램을 열었습니다. 이 데이터베이스 관리 프로그램을 폐쇄하고, 문제가 해결.

    내 문제는 : 나는 "SQLite는 대한 DB 브라우저"라는 이름의 데이터베이스 관리 프로그램을 열었습니다. 이 데이터베이스 관리 프로그램을 폐쇄하고, 문제가 해결.

  10. ==============================

    10.예 이것은 오래된 질문이고 이미 여기에 많은 답변이 있습니다. 그러나 그들 중 누구도 그것이 나에게 마지막으로 문제를 파악하는 데 오랜 시간이 걸렸 의미 나를 위해 일하지 않는다. 나는 일을하고 너무 당신을 위해 문제의 원인이 될 수있는 것입니다 경우에 그것을 공유 할 것을 발견했다.

    예 이것은 오래된 질문이고 이미 여기에 많은 답변이 있습니다. 그러나 그들 중 누구도 그것이 나에게 마지막으로 문제를 파악하는 데 오랜 시간이 걸렸 의미 나를 위해 일하지 않는다. 나는 일을하고 너무 당신을 위해 문제의 원인이 될 수있는 것입니다 경우에 그것을 공유 할 것을 발견했다.

    나는 SQLite는 브라우저 (자사의 GUI 데이터베이스 브라우저)를 사용했다. 여기 "GUI"로 참조합니다 (로컬 호스트 : 8000 크롬 브라우저 또는 어떤 것을 말씀 브라우저로 혼란을 방지하기 위해. http://sqlitebrowser.org/

    나는 데이터베이스에 기록 내 크롬 브라우저에서 내 레일 응용 프로그램으로 실행하는 동안 GUI를 공개했다되고 있었는지 모니터링했다. 나는 그것을가 예상대로 데이터를 추가 한 경우 GUI보고 새로 고침 것이다.

    내 응용 프로그램이 지금 실종되는 행에 적절하게 반응한다면 디버깅을 말하자면 내가 볼 수 있도록 SQLite는 GUI에서 행을 삭제하기로 결정했다.

    그것이 나오는 것에 따라 (행이 아직도처럼 시각적으로 GUI 누락되었다하더라도, 내 응용 프로그램 연기 된 이유에 내 말에 혼란을 일으키는), SQLite는 브라우저 실제로 행을 삭제하지 않습니다. 어쨌든 좌절의 30 분 후 나는 SQLite는 GUI를 폐쇄하고 난 내가 만든 것을 데이터베이스에 변경 사항을 저장하고 싶었 여부를 묻는 통지를 얻었다. 나는 순진하게 "아니오"를 클릭하고 응용 프로그램을 마감했다.

    분명히 무슨 일 삭제에 투입하지 않고 일종의 "소프트 삭제"의 있던 내 데이터베이스에 열이 있기 때문에 GUI는 다음 데이터베이스를 잠겨 있다는 것입니다. 림보에서 데이터베이스를 유지하는 GUI가 (더 나은 용어의 부족) 그래서.

    행과 같은) 내 응용 프로그램 그런게 작용이없는 이유는 실제로 아직 삭제되지 않았기 때문에 이것은 설명하고, 데이터베이스가 잠겨 왜 B)를 설명합니다. 나를 삭제를 저지하는 것은 여전히 ​​기다리고 있었다.

    그래서 문제를 해결하기 위해, 간단히 말해서 나는 다시 한 번 GUI를 열고 같은 행을 삭제 한 후 GUI 폐쇄 및 데이터베이스에 변경 사항을 저장할지 묻는 경우이 시간은 내가 "예"를 클릭했습니다. 그것은 삭제 저장하고 데이터베이스를 잠금 해제하고 지금 내 응용 프로그램은 작동한다!

    나는이 같은 문제가 발생 될 수 있지만, SQLite는 브라우저 GUI 인터페이스를 사용하고 다른 사람을 도움이되기를 바랍니다. 이 데이터베이스를 잠금 무슨 수 있습니다.

  11. ==============================

    11.저도 같은 문제를 가지고 있었다. SQLite 데이터베이스 브라우저를 가진 사람들을 위해. 나는 가까운 SQLite 데이터베이스 브라우저에 필요하지 않았다. 난 단지 "쓰기 변경"버튼을 클릭했다. 그것은 강조하지에 대한 요구가 강조 될 수있다.

    저도 같은 문제를 가지고 있었다. SQLite 데이터베이스 브라우저를 가진 사람들을 위해. 나는 가까운 SQLite 데이터베이스 브라우저에 필요하지 않았다. 난 단지 "쓰기 변경"버튼을 클릭했다. 그것은 강조하지에 대한 요구가 강조 될 수있다.

  12. ==============================

    12.SQLite는 동시성에 문제가 있습니다. 나는 PostgreSQL을에 sqlite가 변경하고 문제가 사라입니다

    SQLite는 동시성에 문제가 있습니다. 나는 PostgreSQL을에 sqlite가 변경하고 문제가 사라입니다

  13. ==============================

    13.당신이 SQLite는 DB 브라우저에 수동으로 직접 변경할 때 (행 삭제 또는 열 값을 변경 같은) 그 변경 사항을 저장하는 것을 잊지 발생합니다. 필요가 모든 변경 사항 (Ctrl + S)를 저장합니다. 저장되지 않은 경우 u는 변경 사항을 저장할 때까지, SQLite는 데이터베이스를 잠급니다.

    당신이 SQLite는 DB 브라우저에 수동으로 직접 변경할 때 (행 삭제 또는 열 값을 변경 같은) 그 변경 사항을 저장하는 것을 잊지 발생합니다. 필요가 모든 변경 사항 (Ctrl + S)를 저장합니다. 저장되지 않은 경우 u는 변경 사항을 저장할 때까지, SQLite는 데이터베이스를 잠급니다.

    저도 같은했고, 내 문제가 해결되었다!

  14. ==============================

    14.나는 SQLite는 대한 DB 브라우저를 사용하여 동시에 콘솔을 레일했다. SQLite는의 DB 브라우저를 닫으면 나를 위해 문제를 해결했습니다.

    나는 SQLite는 대한 DB 브라우저를 사용하여 동시에 콘솔을 레일했다. SQLite는의 DB 브라우저를 닫으면 나를 위해 문제를 해결했습니다.

  15. ==============================

    15.서버를 다시 시작하십시오 또는, 실행중인 레일 콘솔을 종료 나를 위해 일한

    서버를 다시 시작하십시오 또는, 실행중인 레일 콘솔을 종료 나를 위해 일한

  16. ==============================

    16.귀하의 .sqlite3 파일을 저장해야합니다. SQLite는 대한 DB 브라우저로 이동하여 메이크업의 Ctrl 키 + s 또는 파일 -이>의 변화를 작성합니다.

    귀하의 .sqlite3 파일을 저장해야합니다. SQLite는 대한 DB 브라우저로 이동하여 메이크업의 Ctrl 키 + s 또는 파일 -이>의 변화를 작성합니다.

  17. ==============================

    17.단일 트랜잭션에서 랩주기를보십시오 :

    단일 트랜잭션에서 랩주기를보십시오 :

      def create_tracks
        json = Hashie::Mash.new HTTParty.get(self.json_url)    
        Track.transaction do
          json.sections.each do |section|
            if section.section_type=="track"
              Track.create(:name=>section.track.name, :podcast_id=>self.id)
            end
          end
        end             
      end
    

    (Track.transaction 참조)

  18. from https://stackoverflow.com/questions/7154664/ruby-sqlite3busyexception-database-is-locked by cc-by-sa and MIT license