ruby - Running migrations on my Rails DB, adding a column quietly and randomly drops a table without a console error -


i able discouver problem walking through running migrations. last 2 days i've been trying somthing simple. remove 1 column verdict:text simulations table , add column: opinions:hash.

doing caused variety of errors, such no method 'my_sym' , saying simulation table didn't exist.

i thought had resolved doing:

rake db:drop rake db:schema:dump rake db:migrate version="<migration1>" rake db:migrate version="<migration2>" rake db:setup env="test" 

migration 1:

class devisecreateusers < activerecord::migration   def change     create_table(:users) |t|       ## database authenticatable       t.string :email,              :null => false, :default => "", limit: 96       t.string :encrypted_password, :null => false, :default => "", limit: 60        t.timestamps        t.index :email, unique: true     end   end end 

migration 2:

class createsimulations < activerecord::migration   def change     # needs hash column worked out before run      create_table :simulations |t|         t.integer :x_size         t.integer :y_size         t.string :verdict         t.string :arrangement      end      add_reference :simulations, :user, index: true       end end 

this got me square 1 (all tests worked seemed in initial state had before started having problems), re-wrote 2 offending migrations thinking might problem, ran 2 migrations in order (i removed column added other one, opposite order of tried previous, thinking maybe order had effect).

migration 3:

class removeverdictfromsimulation < activerecord::migration   def change     remove_column :simulations, :verdict, :string   end end 

migrations 4:

class addopiniontosimulations < activerecord::migration   def change     add_column :simulations, :opinion, :hash   end end 

edit: further investigation 4th migration causing problem of dropping simulations table without error.

both these migrations worked without error. know doing else cause error (example running rspec), because looks problem 1 of these migration causes error schema.rb file.

after running these last migrations 3&4 schema.rb had both users , simulations tables looks this:

activerecord::schema.define(version: 20150807193122)  # not dump table "simulations" because of following nomethoderror #   undefined method `[]' nil:nilclass    create_table "users", force: :cascade |t|     t.string   "email",              limit: 96, default: "", null: false     t.string   "encrypted_password", limit: 60, default: "", null: false     t.datetime "created_at"     t.datetime "updated_at"   end    add_index "users", ["email"], name: "index_users_on_email", unique: true  end 

the particular line of interest here being:

# not dump table "simulations" because of following nomethoderror #   undefined method `[]' nil:nilclass 

can shed light on whats happening here or how can fix it? i've been stuck on hours.

one thing maybe worth noting, when re-run rake db:schema:dump need comment out factories reason, seem cause errors simulation table existing. not sure why they're being called thought info might help, here both are:

factorygirl.define      factory :simulation |f|         f.id (simulation.last.nil? ? 1 : simulation.last.id + 1)         f.x_size 3         f.y_size 3         f.user_id 1     end  end  

--

factorygirl.define     factory :user         email "user_#{user.last.nil? ? 1 : user.last.id + 1}@home.com"         password "password"     end end 

i think problem right here:

class addopiniontosimulations < activerecord::migration   def change     add_column :simulations, :opinion, :hash   end end 

there's no such thing hash column type. sqlite will, unfortunately, let create columns type want (with unrecognized things being treated strings) activerecord won't know them. result migration works schema dump fails because activerecord can't say:

t.hash :opinion 

in schema.rb file.

if think want store hash in column, you'd create text column:

add_column :simulations, :opinion, :text 

and use serialize in model:

serialize :opinion, hash 

of course leaves opaque blob of yaml in database won't able (sanely) query should used if okay that.

a better solution normalize opinion hashes store information in separate tables/models.


Comments

Popular posts from this blog

yii2 - Yii 2 Running a Cron in the basic template -

asp.net - 'System.Web.HttpContext' does not contain a definition for 'GetOwinContext' Mystery -

mercurial graft feature, can it copy? -