rake aborted! Could not find table ...

I am getting a rake aborted error and I suspect that I am missing a
package on my system since the app works for a friend on this
computer.

Here is the terminal output of the error:

anita@anitas-computer:~/sandbox/shovell$ rake db:migrate
(in /home/anita/sandbox/shovell)
rake aborted!
Could not find table 'stories'

(See full trace by running task with --trace)
anita@anitas-computer:~/sandbox/shovell$

Here is the contents of the migration file:

anita@anitas-computer:~/sandbox/shovell/db/migrate$ cat
20080701040248_create_stories.rb
class CreateStories < ActiveRecord::Migration
  def self.up
    create_table :stories do |t|
      t.text :name
      t.text :link

      t.timestamps
    end
  end

  def self.down
    drop_table :stories
  end
end
anita@anitas-computer:~/sandbox/shovell/db/migrate$

Here is the stack trace:

anita@anitas-computer:~/sandbox/shovell$ rake db:migrate --trace
(in /home/anita/sandbox/shovell)
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:migrate
** Invoke db:schema:dump (first_time)
** Invoke environment
** Execute db:schema:dump
rake aborted!
Could not find table 'stories'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
connection_adapters/sqlite3_adapter.rb:29:in `table_structure'
/usr/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/
core_ext/object/misc.rb:28:in `returning'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
connection_adapters/sqlite3_adapter.rb:28:in `table_structure'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
connection_adapters/sqlite_adapter.rb:189:in `columns'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
schema_dumper.rb:75:in `table'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
schema_dumper.rb:70:in `tables'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
schema_dumper.rb:61:in `each'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
schema_dumper.rb:61:in `tables'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
schema_dumper.rb:23:in `dump'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
schema_dumper.rb:17:in `dump'
/usr/lib/ruby/gems/1.8/gems/rails-2.1.0/lib/tasks/databases.rake:219
/usr/lib/ruby/gems/1.8/gems/rails-2.1.0/lib/tasks/databases.rake:
218:in `open'
/usr/lib/ruby/gems/1.8/gems/rails-2.1.0/lib/tasks/databases.rake:218
/usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:546:in `call'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:546:in `execute'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:541:in `each'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:541:in `execute'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:508:in
`invoke_with_call_chain'
/usr/lib/ruby/1.8/thread.rb:135:in `synchronize'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:501:in
`invoke_with_call_chain'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:494:in `invoke'
/usr/lib/ruby/gems/1.8/gems/rails-2.1.0/lib/tasks/databases.rake:100
/usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:546:in `call'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:546:in `execute'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:541:in `each'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:541:in `execute'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:508:in
`invoke_with_call_chain'
/usr/lib/ruby/1.8/thread.rb:135:in `synchronize'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:501:in
`invoke_with_call_chain'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:494:in `invoke'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1931:in
`invoke_task'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1909:in `top_level'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1909:in `each'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1909:in `top_level'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1948:in
`standard_exception_handling'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1903:in `top_level'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1881:in `run'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1948:in
`standard_exception_handling'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1878:in `run'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.1/bin/rake:31
/usr/bin/rake:19:in `load'
/usr/bin/rake:19
anita@anitas-computer:~/sandbox/shovell$

Any thoughts about what file or package is missing to cause this
situation, are gratefully received. Thank you,
Anita.

an you put the database.yml file too?

the migrations seems fine, and as you said it works on someone else's
computer.

Wolas!:

Thanks for the reply. As requested, database.yml:

anita@anitas-computer:~/sandbox/shovell/config$ cat database.yml
# SQLite version 3.x
# gem install sqlite3-ruby (not necessary on OS X Leopard)
development:
  adapter: sqlite3
  database: db/development.sqlite3
  timeout: 5000

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  adapter: sqlite3
  database: db/test.sqlite3
  timeout: 5000

production:
  adapter: sqlite3
  database: db/production.sqlite3
  timeout: 5000
anita@anitas-computer:~/sandbox/shovell/config$

Your migration asked to create new table that is stories but the error
said like it were wanting to modify table stories. please check your
schema.rb or previous migration files. Is there any syntax that want to
modify stories table? and check also your migration version in schema.rb
and in your table.

Reinhart
http://teapoci.blogspot.com

What makes you think that this migration is the problem? Do any other
migrations reference stories?

Fred

The migration is fine. if the tabls stories was already there it would
have complained about it. bu the error is the opposite:

Could not find table 'stories'

it defenitely seems like youre modifying the table before you have
created it.

My only suggestion here is make sure you have the development packages
for sqlite3 as well as the client ones.

I ran out of ideas at this point.

j

you might also want to check config/environment.rb for anything that might be preloading or reading from the stories. I tried some cleverness like this once and it burped a similar error when migrating up from zero.

RSL

I experience exactly the same problem. It works on my computer (using
MySQL), but fails on another one (using sqlite3).

database.yml:

development:
  adapter: sqlite3
  database: db/development.sqlite3
  timeout: 5000

I have two migration files:
20080701141405_create_commands.rb
20080701142511_add_content_to_database.rb

First one:

  def self.up
    create_table :commands do |t|
      t.string :name
      t.text :xml
      t.timestamps
    end
  end

  def self.down
    drop_table :commands
  end

Second one:

  def self.up
    # here is a loop that fetches external data
        Command.create(
          :name => name,
          :xml => xml_string
        )
    # end of loop
  end

  def self.down
    Command.delete_all
  end

The first one works OK, but the second migration fails with
rake aborted!
Could not find table 'commands'

If I try to create another "create table" statement, then it complains
with

rake aborted!
SQLite3::SQLException: table "commands" already exists: CREATE TABLE
"commands" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name"
varchar(255) DEFAULT NULL NULL, "xml" text DEFAULT NULL NULL,
"created_at" datetime DEFAULT NULL NULL, "updated_at" datetime DEFAULT
NULL NULL)

I'm clueless. I don't set anything in environment.rb by myself.

I had some problems installing rails

Thanks a lot,
   Mojca

If that matters, I had some problems installing latest version of gems,
but that got resolved:

gem update --system

Updating RubyGems...
Bulk updating Gem source index for: http://gems.rubyforge.org
Attempting remote update of rubygems-update
ERROR: While executing gem ... (Gem::GemNotFoundException)
    Could not find rubygems-update (> 0) in any repository

gem env

RubyGems Environment:
  - VERSION: 0.9.2 (0.9.2)
  - INSTALLATION DIRECTORY: /usr/lib/ruby/gems/1.8
  - GEM PATH:
     - /usr/lib/ruby/gems/1.8
  - REMOTE SOURCES:
     - http://gems.rubyforge.org

sudo mv /usr/lib/ruby/gems/1.8/source_cache /tmp

sudo gem update --system

Updating RubyGems...
Bulk updating Gem source index for: http://gems.rubyforge.org
Attempting remote update of rubygems-update
ERROR: While executing gem ... (Gem::GemNotFoundException)
    Could not find rubygems-update (> 0) in any repository

sudo gem install rubygems-update

Bulk updating Gem source index for: http://gems.rubyforge.org
Successfully installed rubygems-update-1.2.0

sudo gem update --system

Updating RubyGems...
Attempting remote update of rubygems-update
Successfully installed rubygems-update-1.2.0
Updating version of RubyGems to 1.2.0
Installing RubyGems 1.2.0
mkdir -p /usr/lib/ruby/site_ruby/1.8
mkdir -p /usr/bin
install -c -m 0644 rubygems.rb /usr/lib/ruby/site_ruby/1.8/rubygems.rb
...
[success]

Thank you all for your suggestions and input.

This is the first migration of the application or in other words migration zero.

I will take a look at the other comments and see what develops.

Thank you,
Anita.

As suggested here is the schema.rb:

anita@anitas-computer:~/sandbox/shovell/db$ cat schema.rb
# This file is auto-generated from the current state of the database.
Instead of editing this file,
# please use the migrations feature of Active Record to incrementally
modify your database, and
# then regenerate this schema definition.

What makes you think that this migration is the problem? Do any other
migrations reference stories?

This is the first migration in the application.

Anita.

Here is config/environment.rb:

anita@anitas-computer:~/sandbox/shovell/config$ cat environment.rb
# Be sure to restart your server when you modify this file

# Uncomment below to force Rails into production mode when
# you don't control web/app server and can't set it the proper way
# ENV['RAILS_ENV'] ||= 'production'

# Specifies gem version of Rails to use when vendor/rails is not present
RAILS_GEM_VERSION = '2.1.0' unless defined? RAILS_GEM_VERSION

# Bootstrap the Rails environment, frameworks, and default configuration
require File.join(File.dirname(__FILE__), 'boot')

Rails::Initializer.run do |config|
  # Settings in config/environments/* take precedence over those specified here.
  # Application configuration should go into files in config/initializers
  # -- all .rb files in that directory are automatically loaded.
  # See Rails::Configuration for more options.

  # Skip frameworks you're not going to use. To use Rails without a database
  # you must remove the Active Record framework.
  # config.frameworks -= [ :active_record, :active_resource, :action_mailer ]

  # Specify gems that this application depends on.
  # They can then be installed with "rake gems:install" on new installations.
  # config.gem "bj"
  # config.gem "hpricot", :version => '0.6', :source =>
"http://code.whytheluckystiff.net"
  # config.gem "aws-s3", :lib => "aws/s3"

  # Only load the plugins named here, in the order given. By default,
all plugins
  # in vendor/plugins are loaded in alphabetical order.
  # :all can be used as a placeholder for all plugins not explicitly named
  # config.plugins = [ :exception_notification, :ssl_requirement, :all ]

  # Add additional load paths for your own custom dirs
  # config.load_paths += %W( #{RAILS_ROOT}/extras )

  # Force all environments to use the same logger level
  # (by default production uses :info, the others :debug)
  # config.log_level = :debug

  # Make Time.zone default to the specified zone, and make Active
Record store time values
  # in the database in UTC, and return them converted to the specified
local zone.
  # Run "rake -D time" for a list of tasks for finding time zone
names. Uncomment to use default local time.
  config.time_zone = 'UTC'

  # Your secret key for verifying cookie session data integrity.
  # If you change this key, all old sessions will become invalid!
  # Make sure the secret is at least 30 characters and all random,
  # no regular words or you'll be exposed to dictionary attacks.
  config.action_controller.session = {
    :session_key => '_shovell_session',
    :secret =>
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
#hidden for the purpose of this email
  }

  # Use the database for sessions instead of the cookie-based default,
  # which shouldn't be used to store highly confidential information
  # (create the session table with "rake db:sessions:create")
  # config.action_controller.session_store = :active_record_store

  # Use SQL instead of Active Record's schema dumper when creating the
test database.
  # This is necessary if your schema can't be completely dumped by the
schema dumper,
  # like if you have constraints or database-specific column types
  # config.active_record.schema_format = :sql

  # Activate observers that should always be running
  # config.active_record.observers = :cacher, :garbage_collector
end
anita@anitas-computer:~/sandbox/shovell/config$

I have the exact same problem on my Debian server.
Has anybody found a solution?

kristian

Kristian wrote:

I have the exact same problem on my Debian server.
Has anybody found a solution?

Take a look at
    http://www.ruby-forum.com/topic/144703

It might be the same problem - buggy sqlite3(-ruby) interface. The
suggested solution is to downgrade the gem. I gave up using sqlite3 and
switched to mysql instead.

Mojca

Hi anita,

You just have to migrate the production too... or you can duplicate your
development db and rename to production.sqlite3... unusual but solve the
problem.

Best regards

Eduardo