Activerecord 在Heroku上,运行db:migrate而不出错,填充了'schema_migrations',但未更改schema
我有一个Sinatra应用程序,我正试图与Heroku一起部署。应用程序正在运行,并且工作正常(不依赖DB连接的部分) 我已经为应用程序创建了一个Postgresql数据库,但由于某种原因,当我尝试迁移数据库时(我的初始迁移是创建一些表),尽管没有错误,但没有创建表。更奇怪的是,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
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完成!”
。