WebHU - Programozási kérdések és válaszok

A rake db:migrate nem futtatható ruby, sinatra és activerecord használatával

Nem tudom futtatni a rake db:migrate-et két külön áttelepítési fájllal a db/migrate könyvtárban. Sinatrát használok Activerecord-dal (nem rails).

Migráció1 időbélyeggel:

class CreateAdmins < ActiveRecord::Migration
  #def change
  #end
  def up
     create_table :admins do |t|
        t.string :email
        t.string :name
     end
  end

  def down
      drop table :admins
  end
end

Migráció2

    class CreateBills < ActiveRecord::Migration
      #def change
      #end
      def up
         create_table: bills do |t|
             t.string :email
             t.string :title
             t.text :body
         end
      end

  def down
    drop_table :bills
   end
end

Gemfile:

# Gemfile

source 'https://rubygems.org'


gem "sinatra"
gem "activerecord"
gem "sinatra-activerecord"
gem 'sinatra-flash'
gem 'sinatra-redirect-with-flash'
gem 'rake'

group :development do
 gem 'sqlite3'
 gem "tux"
end

group :production do
 gem 'sqlite3'
end

Rakefile

# Rakefile

require './app'
require 'sinatra'
require 'active_record'
require 'sinatra/activerecord/rake'
#require 'rake'

Amikor futtatom a rake db:migrate parancsot, az alább másolt hibaüzenet jelenik meg.

rake aborted!
Errno::ENOENT: No such file or directory @ rb_sysopen - db:migrate
/opt/test/ruby/6/app.rb:31:in `gets'
/opt/test/ruby/6/app.rb:31:in `gets'
/opt/test/ruby/6/app.rb:31:in `<top (required)>'
/opt/test/ruby/6/Rakefile:3:in `require'
/opt/test/ruby/6/Rakefile:3:in `<top (required)>'
/usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/rake/rake_module.rb:28:in `load'
/usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/rake/rake_module.rb:28:in `load_rakefile'
/usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/rake/application.rb:689:in `raw_load_rakefile'
/usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/rake/application.rb:94:in `block in load_rakefile'
/usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/rake/application.rb:176:in `standard_exception_handling'
/usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/rake/application.rb:93:in `load_rakefile'
/usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/rake/application.rb:77:in `block in run'
/usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/rake/application.rb:176:in `standard_exception_handling'
/usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/rake/application.rb:75:in `run'
/usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/gems/2.2.0/gems/rake-10.4.2/bin/rake:33:in `<top (required)>'
/usr/local/rvm/gems/ruby-2.2.1/bin/rake:23:in `load'
/usr/local/rvm/gems/ruby-2.2.1/bin/rake:23:in `<main>'
/usr/local/rvm/gems/ruby-2.2.1/bin/ruby_executable_hooks:15:in `eval'
/usr/local/rvm/gems/ruby-2.2.1/bin/ruby_executable_hooks:15:in `<main>'

Frissítés: megjegyzést írtam az app.rb fájlom egy részére, amely lehetővé tette a rake db:migrate futtatását.

 rake db:migrate --trace
** Invoke db:migrate (first_time)
** Invoke db:environment (first_time)
** Execute db:environment
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:migrate
** Invoke db:_dump (first_time)
** Execute db:_dump
** Invoke db:schema:dump (first_time)
** Invoke db:environment
** Invoke db:load_config
** Execute db:schema:dump

Azonban még a rake db:migrate futtatása után sem találtam meg a táblákat az adatbázisban (sqlite használatával). Megpróbáltam hozzáadni az adminisztrátori modellt a ruby ​​fájlon keresztül, de a következő hibaüzenetet kaptam:

/usr/local/rvm/gems/ruby-2.2.1/gems/activerecord-4.2.4/lib/active_record/connection_adapters/sqlite3_adapter.rb:511:in `table_structure': Could not find table 'admins' (ActiveRecord::StatementInvalid)
        from /usr/local/rvm/gems/ruby-2.2.1/gems/activerecord-4.2.4/lib/active_record/connection_adapters/sqlite3_adapter.rb:385:in `columns'
        from /usr/local/rvm/gems/ruby-2.2.1/gems/activerecord-4.2.4/lib/active_record/connection_adapters/schema_cache.rb:43:in `columns'
        from /usr/local/rvm/gems/ruby-2.2.1/gems/activerecord-4.2.4/lib/active_record/attributes.rb:93:in `columns'
        from /usr/local/rvm/gems/ruby-2.2.1/gems/activerecord-4.2.4/lib/active_record/attributes.rb:98:in `columns_hash'
        from /usr/local/rvm/gems/ruby-2.2.1/gems/activerecord-4.2.4/lib/active_record/inheritance.rb:205:in `subclass_from_attributes?'
        from /usr/local/rvm/gems/ruby-2.2.1/gems/activerecord-4.2.4/lib/active_record/inheritance.rb:54:in `new'
        from /usr/local/rvm/gems/ruby-2.2.1/gems/activerecord-4.2.4/lib/active_record/persistence.rb:50:in `create!'

A ruby ​​verzió 2.2.1p85

Amikor megpróbálom futtatni a rake db:rollbacket, nem panaszkodik amiatt, hogy nincsenek ott az eldobandó asztalok.

Látom, hogy a schema.rb fájl nem frissül a rake db:migrate után

ActiveRecord::Schema.define(version: 20150907140840) do

end  

Amikor megpróbálom futtatni a rake db:create vagy a rake db:setup parancsot, mindkét parancs meghiúsul.

08.09.2015

  • Elfelejtettem hozzászólni a változás rovathoz. 08.09.2015
  • @ user3813256 Megoldottad ezt valaha? 16.09.2019

Válaszok:


1

Az első áttelepítéskor módosítsa ezt:

  def up
     create_table :admins do |t|
        t.string = email
        t.string = name
     end
  end

To:

  def up
     create_table :admins do |t|
        t.string :email
        t.string :name
     end
  end

Egy másik probléma, hogy a második migráció során create_table: bills do |t| a következőnek kell lennie: create_table :bills do |t|

08.09.2015
  • Szerintem ez a következő hiba. NoMethodError-t várnék, ha elértük ezt a kódot, de úgy tűnik, hogy az OP még a db:migrate-t sem tudja futtatni. 08.09.2015
  • Az első áttelepítés kijavítása után is ugyanazt a hibaüzenetet kapom. 08.09.2015
  • hmm, igen, mivel a mu-t túl röviden említettem, ez a második probléma. Valami más is történik. 08.09.2015
  • egy másik probléma az, hogy a 2. migrációnál: create_table: bills do |t| a következőnek kell lennie: create_table :bills do |t| 08.09.2015
  • javítja a problémát, és próbálja újra? tudasd velem. 08.09.2015
  • kérem tekintse meg frissítésemet az eredeti bejegyzésem végén. Most már kivétel nélkül futtathatom a rake db:migrate-et, de nem látok DB táblákat generálni 08.09.2015
  • Mit kommentáltál az app.rb fájlodban? mit látsz a migráció futtatásakor? Valami ehhez hasonlót kell látnod a rake db:migrate futtatásakor: == 20150903233550 AddStartsAtToMicroPosts: migrating ========================== -- add_column(:microposts, :starts_at, :datetime) -> 0.0006s == 20150903233550 AddStartsAtToMicroPosts: migrated (0.0006s) ================= 08.09.2015
  • úgy tűnik, hogy a migráció működik, pl. nem tesz kivételt, de nem látom a táblázatokat - az eredeti bejegyzést egy percen belül frissítem 08.09.2015
  • az áttelepítés működik, azt jelenti, hogy az áttelepítés futtatásakor láthatja, hogy a tábla sikeresen létrejött? Ha igen, próbálja meg újraindítani az alkalmazást/konzolt, és próbálja újra. 08.09.2015
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..