我有一个 Sinatra 应用程序,我正在尝试使用 Heroku 进行部署。该应用程序正在运行,并且工作正常(不依赖数据库连接的部分)。
我为该应用程序创建了一个 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