2015-09-08 79 views
1

我無法運行rake db:在db/migrate目錄內使用兩個單獨的遷移文件進行遷移。我用activerecord(不是rails)使用sinatra。無法運行rake db:使用ruby,sinatra和activerecord進行遷移

Migration1具有時間戳

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 

Migration2

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 

Rake文件

# Rakefile 

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

當我運行耙分貝:遷移,我得到下面複製錯誤。

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>' 

更新: 我註釋掉這讓我跑耙分貝我app.rb文件的一部分:遷移。

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 

但是,即使運行rake db:migrate之後,我也找不到數據庫中的表(使用sqlite)。我想通過我的紅寶石文件中添加管理模式,但會出現以下錯誤:

/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!' 

紅寶石版本2.2.1p85

當我試圖運行耙分貝:回滾失敗抱怨的事實,要刪除的表不存在。

我可以看到schema.rb文件不耙分貝後更新:遷移

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

end 

當我試圖運行耙分貝:創建或耙分貝:設置程序後,命令將失敗。

+0

我忘了註釋掉改變部分。 – user3813256

回答

2

在第一次遷移,改變這種:

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

要:

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

的另一個問題是,在你的第二個遷移,create_table: bills do |t|應該是:create_table :bills do |t|

+0

我認爲這是下一個錯誤。我希望看到一個NoMethodError,如果達到了代碼,但看起來OP甚至不能讓db:migrate運行。 –

+0

修復第一次遷移後,我仍然收到相同的錯誤。 – user3813256

+0

嗯,是的,因爲畝太短提到,這是第二個問題。你還有其他事情正在發生。 –

相關問題