Reputation: 57
I'm new to Ruby and Ruby on Rails.
I'm making a sample app (not using scaffolding) to insert a row into a table. Table has 2 columns, "name" and "description" (along with the 3 magic columns).
In my view, I have something that looks like this:
<h1>New Location</h1>
<%= form_for(@location) do |l| %>
<div class="field">
<%= l.label :name %><br />
<%= l.text_field :name %>
</div>
<div class="field">
<%= l.label :description %><br />
<%= l.text_field :description %>
</div>
<div class="actions">
<%= l.submit "Add" %>
</div>
And controller:
class LocationsController < ApplicationController
def new
@location = Location.new
end
def create
@location = Location.new(params[:location])
@location.save #fails on this line
redirect_to @location
end
end
Model code:
class Location < ActiveRecord::Base
attr_accessible :name, :description
has_many :foods
end
This is what the console prints out:
Started POST "/locations" for 127.0.0.1 at Wed Jan 25 17:09:22 -0500 2012
Processing by LocationsController#create as HTML
Parameters: {"commit"=>"Add", "location"=>{"name"=>"name", "description"=>"description"}, "authenticity_token"=>"7rT1/3qSn/Kz1cGg8iTFCKbkO0W/L7ETT+lNcSSN6FI=", "utf8"=>"\342\234\223"} (0.1ms) begin transaction
SQL (5081.3ms) INSERT INTO "locations" ("created_at", "description", "name", "updated_at") VALUES (?, ?, ?, ?) [["created_at", Wed, 25 Jan 2012 22:09:22 UTC +00:00], ["description", "description"], ["name", "name"], ["updated_at", Wed, 25 Jan 2012 22:09:22 UTC +00:00]]
SQLite3::BusyException: database is locked: INSERT INTO "locations" ("created_at", "description", "name", "updated_at") VALUES (?, ?, ?, ?)
(0.2ms) rollback transaction
SQLite3::BusyException: cannot rollback transaction - SQL statements in progress: rollback transaction
Completed 500 Internal Server Error in 5084ms
ActiveRecord::StatementInvalid (SQLite3::BusyException: cannot rollback transaction - SQL statements in progress: rollback transaction): app/controllers/locations_controller.rb:8:in `create'
Rendered /Library/Ruby/Gems/1.8/gems/actionpack 3.2.0/lib/action_dispatch/middleware/templates/rescues/_trace.erb (0.8ms)
Rendered /Library/Ruby/Gems/1.8/gems/actionpack 3.2.0/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (0.8ms)
Rendered /Library/Ruby/Gems/1.8/gems/actionpack 3.2.0/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (3.9ms)
tl;dr: calling .save fails and returns SQLite3::SQLException: cannot start a transaction within a transaction: begin transaction
Upvotes: 3
Views: 4477
Reputation: 2056
This error gives it away:
SQLite3::BusyException: database is locked
There's probably another process running that is using the database at the same time.
Upvotes: 1