【问题标题】:Sinatra db table not created after migration迁移后未创建 Sinatra 数据库表
【发布时间】:2017-02-08 11:50:19
【问题描述】:

我正在尝试使用 Sinatra 和 Sinatra/活动记录创建活动记录,我的迁移正在迁移到 Postgres 数据库,但没有在数据库中创建表,我通过了所有可能的堆栈溢出解决方案,但它的没用。我什至尝试从 db/migrate 文件夹中删除我的迁移文件,但输出仍然相同。应该是什么错误

宝石文件

source 'https://rubygems.org'

gem "sinatra"
gem "pg"    #for postgres
gem "activerecord" 
gem "sinatra-activerecord"

config.ru

require "./app"
run Sinatra::Application

rakefile.rb

require "./app"
require "sinatra/activerecord/rake"

app.rb

require 'sinatra'
require 'sinatra/activerecord' 
db = URI.parse('postgres://project1:project1@localhost/*****')
ActiveRecord::Base.establish_connection(
  :adapter  => db.scheme == 'postgres' ? 'postgresql' : db.scheme,
  :host     => db.host,
  :username => db.user,
  :password => db.password,
  :database => db.path[1..-1],
  :encoding => 'utf8'
 )


class Note < ActiveRecord::Base
end

class CreateNotes < ActiveRecord::Migration
  def up
    create_table :notes do |t|
        t.string    :title
        t.text  :body
        t.timestamps
    end 
  end
  def down
    drop_table  :notes
  end
end

迁移输出

user@user-Inspiron-5520:~/rails-apps/project1$ rake db:migrate
== 20150704053019 CreateNotes: migrating      ======================================
== 20150704053019 CreateNotes: migrated (0.0000s)   =============================

数据库输出 (psql)

\dt

           List of relations
 Schema |       Name        | Type  |   Owner   
--------+-------------------+-------+-----------
 public | schema_migrations | table | project1
(1 row)

project1=# select * from schema_migrations;
   version     
----------------
20150704053019

(1 行)

注意: Project1 用户是拥有所有权限的超级用户

编辑

迁移文件 20150704053019_create_notes.rb

class CreateNotes < ActiveRecord::Migration
  def change
  end
end

【问题讨论】:

  • 我猜你已经尝试过rake db:rollback,然后重新运行?
  • 你能发布迁移文件吗?
  • 您用于创建 notes 表的迁移实际上保存在 app.rb 中。但是 migrate 任务会在 db/migrate 中查找迁移。如果您在底部提供的迁移文件在正确的目录中,则将迁移定义从 app.rb 移动到那里。
  • 非常感谢它正在工作,我理解我的错误。首先,我没有为我的应用程序制定任何适当的工作流程和文件夹结构,因此它变得一团糟。
  • @limekin 我建议您将其作为答案,因为 Ankita.P 清楚地发现它很有帮助并会接受它,以便您获得代表。

标签: ruby activerecord sinatra psql sinatra-activerecord


【解决方案1】:

我首先要指出的是,@limekin 是第一个得到答案的人,并评论道:

您用于创建 notes 表的迁移实际上保存在 app.rb 中。但是 migrate 任务在 db/migrate 中查找迁移。如果您在底部提供的迁移文件在正确的目录中,则将迁移定义从 app.rb 移动到那里。

我将详细介绍一下。您用于创建表的函数属于迁移文件,因为迁移是创建、更改和删除表、列和记录的操作。

因此,要解决您的问题,只需将应用文件中的函数向上移动到迁移文件中的更改函数中即可。

【讨论】:

    猜你喜欢
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 2022-06-26
    • 2021-01-17
    • 1970-01-01
    相关资源
    最近更新 更多