Activerecord 在Heroku上,运行db:migrate而不出错,填充了'schema_migrations',但未更改schema

Activerecord 在Heroku上,运行db:migrate而不出错,填充了'schema_migrations',但未更改schema,activerecord,heroku,sinatra,rake,heroku-postgres,Activerecord,Heroku,Sinatra,Rake,Heroku Postgres,我有一个Sinatra应用程序,我正试图与Heroku一起部署。应用程序正在运行,并且工作正常(不依赖DB连接的部分) 我已经为应用程序创建了一个Postgresql数据库,但由于某种原因,当我尝试迁移数据库时(我的初始迁移是创建一些表),尽管没有错误,但没有创建表。更奇怪的是,schema_migrations表中填充了迁移的时间戳,就好像它们是正确运行的一样 我尝试重新启动应用程序,删除数据库并创建一个新的数据库 谢谢你的帮助 请参见下面的输出。应该已经运行了13次迁移 dave@macbo

我有一个Sinatra应用程序,我正试图与Heroku一起部署。应用程序正在运行,并且工作正常(不依赖DB连接的部分)

我已经为应用程序创建了一个Postgresql数据库,但由于某种原因,当我尝试迁移数据库时(我的初始迁移是创建一些表),尽管没有错误,但没有创建表。更奇怪的是,
schema_migrations
表中填充了迁移的时间戳,就好像它们是正确运行的一样

我尝试重新启动应用程序,删除数据库并创建一个新的数据库

谢谢你的帮助

请参见下面的输出。应该已经运行了13次迁移

dave@macbook:~/Development/personal/sinatra-app$ heroku pg:reset DATABASE_URL

 !    WARNING: Destructive Action
 !    This command will affect the app: sinatra-app-api
 !    To proceed, type "sinatra-app-api" or re-run this command with --confirm sinatra-app-api

> sinatra-app-api
Resetting HEROKU_POSTGRESQL_BROWN_URL (DATABASE_URL)... done

dave@macbook:~/Development/personal/sinatra-app$ heroku config
=== sinatra-app-api Config Vars
DATABASE_URL:                postgres://OWNER:PASSWORD@HOST:5432/sinatra-app-database
HEROKU_POSTGRESQL_BROWN_URL: postgres://OWNER:PASSWORD@HOST:5432/sinatra-app-database

dave@macbook:~/Development/personal/sinatra-app$ heroku pg:psql
psql (9.2.4)
sinatra-app-database=> \dt
No relations found.

dave@macbook:~/Development/personal/sinatra-app$ heroku run rake db:migrate --trace
Running `rake db:migrate --trace` attached to terminal... up, run.1128
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
{"production"=>{"adapter"=>"postgresql", "database"=>"sinatra-app-database", "username"=>"OWNER", "password"=>"PASSWORD", "host"=>"HOST", "port"=>5432}}
** Execute db:migrate
dave@macbook:~/Development/personal/sinatra-app$ heroku pg:psql
psql (9.2.4)

sinatra-app-database=> \dt
                  List of relations
 Schema |       Name        | Type  |     Owner
--------+-------------------+-------+----------------
 public | schema_migrations | table | OWNER
(1 row)

sinatra-app-database=> select * from schema_migrations ;
    version
----------------
 20131364733212
 20131364737284
 20131364755591
 20131364755887
 20131364756006
 20131364766771
 20131365332699
 20131365332706
 20131365333238
 20131365334088
 20131365334094
 20131376235209
 20131378061826
(13 rows)
也可以在此处查看我的Rakefile的相关部分:

# encoding: utf-8
#!/usr/bin/env rake
require "rubygems"
require "active_record"
require "active_support/inflector"
require "logger"
require "yaml"
require 'csv'
require 'bundler'
require 'rake/testtask'
require 'erb'

desc "Used internally by the Rakefile."
task "environment" do
   environment = ENV["RACK_ENV"] || "development"
   configuration = YAML.load(ERB.new(File.read(File.join("config","database.yml"))).result)
   ActiveRecord::Base.establish_connection(configuration[environment])
end

namespace :db do
   desc "Run database migrations."
   task :migrate => :environment do
      ActiveRecord::Migrator.migrate('db/migrate', ENV["VERSION"] ? ENV["VERSION"].to_i : nil )
   end

   desc "Rollback last <STEPS> migrations. Defaults to 1"
   task :rollback => :environment do
      ActiveRecord::Migrator.rollback('db/migrate', ENV["STEPS"] ? ENV["STEPS"].to_i : 1)
   end

    desc "Forwards next <STEPS> migrations. Defaults to 1"
    task :forward => :environment do
      ActiveRecord::Migrator.forward('db/migrate', ENV["STEPS"] ? ENV["STEPS"].to_i : 1)
    end
end
编码:utf-8 #!/usr/垃圾箱/环境耙 需要“rubygems” 需要“活动记录” 需要“主动支持/拐点” 需要“记录器” 需要“yaml” 需要“csv” 需要“bundler” 需要“rake/testtask” 需要“雇员再培训局” “描述”由耙铲内部使用 任务“环境”做什么 环境=环境[“机架环境”]| |“开发” configuration=YAML.load(ERB.new(File.read(File.join(“config”,“database.yml”))).result) ActiveRecord::Base.建立\u连接(配置[环境]) 结束 名称空间:db do desc“运行数据库迁移” 任务:迁移=>:环境执行 ActiveRecord::Migrator.migrate('db/migrate',ENV[“VERSION”]?ENV[“VERSION”]。to_i:nil) 结束 desc“回滚上次迁移。默认值为1” 任务:回滚=>:环境执行 ActiveRecord::Migrator.rollback('db/migrate',ENV[“STEPS”]?ENV[“STEPS”]。to_i:1) 结束 desc“转发下一次迁移。默认值为1” 任务:转发=>:环境执行 ActiveRecord::Migrator.forward('db/migrate',ENV[“STEPS”]?ENV[“STEPS”]。to_i:1) 结束 结束
它在本地工作吗?是的,本地没有问题我在警告中包装每个迁移(正如我不久前遇到的类似情况),以确认文件实际上正在运行,而不仅仅是迁移器,例如
警告“正在运行迁移,向上,001”
警告“001完成!”