Search code examples
ruby-on-railsruby-on-rails-4

rake aborted! ActiveRecord::StatementInvalid: SQLite3::ReadOnlyException


I am trying to deploy an app to EC2 following this tutorial. When I run rake db:migrate, I get this error:

rake aborted!                                                                                                                                                                         
ActiveRecord::StatementInvalid: SQLite3::ReadOnlyException: attempt to write a readonly database: CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL) 

when running ls -l

total 16                                                                                                                                                                        
-rw-r--r-- 1 root   root      0 Apr 16 03:55 development.sqlite3                                                                                                                
drwxrwxr-x 2 ubuntu ubuntu 4096 Apr 16 03:48 migrate                                                                                                                            
-rw-rw-r-- 1 ubuntu ubuntu 5989 Apr 16 03:48 schema.rb                                                                                                                          
-rw-rw-r-- 1 ubuntu ubuntu  345 Apr 16 03:48 seeds.rb                                                                                                                           
-rw-r--r-- 1 ubuntu ubuntu    0 Apr 16 12:28 test.sqlite3

Solution

  • If you're running in development mode on the server (generally not what you want to do, but can be useful for learning), you need to modify the permissions of your sqlite database. So, if you're running an ubuntu AMI on EC2 (which I think you are) run sudo chown ubuntu:ubuntu development.sqlite3 and sudo chown ubuntu:ubuntu test.sqlite3.

    This changes the user who owns the file (chown = change owner) to the ubuntu user.