【问题标题】:Rails 4.0.1 on Heroku, can't create databaseHeroku上的Rails 4.0.1,无法创建数据库
【发布时间】:2013-12-16 03:07:52
【问题描述】:

我无法让 rake db:migrate 在 Heroku 上的 rails 4.0.1 应用程序上运行。

我猜我没有正确配置 postgres...但是阅读 heroku 上的文档并没有真正帮助,我不知道该怎么做。我对 heroku 或 postgres 了解不多。

任何帮助或资源将不胜感激。如果还有什么我可以发布的,请告诉我。

(另外,如果重要的话,我正在使用设计)

当我运行 heroku run rake db:migrate 时,我得到了这个:

Running `rake db:migrate` attached to terminal... up, run.5077
PG::UndefinedTable: ERROR:  relation "users" does not exist
LINE 5:                WHERE a.attrelid = '"users"'::regclass
                                      ^
:               SELECT a.attname, format_type(a.atttypid, a.atttypmod),
                 pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod
            FROM pg_attribute a LEFT JOIN pg_attrdef d
              ON a.attrelid = d.adrelid AND a.attnum = d.adnum
           WHERE a.attrelid = '"users"'::regclass
             AND a.attnum > 0 AND NOT a.attisdropped
           ORDER BY a.attnum

rake aborted!
PG::UndefinedTable: ERROR:  relation "users" does not exist
LINE 5:                WHERE a.attrelid = '"users"'::regclass
                                      ^
:               SELECT a.attname, format_type(a.atttypid, a.atttypmod),
                 pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod
            FROM pg_attribute a LEFT JOIN pg_attrdef d
              ON a.attrelid = d.adrelid AND a.attnum = d.adnum
           WHERE a.attrelid = '"users"'::regclass
             AND a.attnum > 0 AND NOT a.attisdropped
           ORDER BY a.attnum

当我运行 heroku run rake db:setup 时,我得到了这个:

FATAL:  permission denied for database "postgres"
DETAIL:  User does not have CONNECT privilege.

... stack trace ...

Couldn't create database for {"adapter"=>"postgresql", "username"=>"aqofwrwjifcqkx", "password"=>"7yqDAx1L_4HFhw7WV3PH7ZrKyM", "port"=>5432, "database"=>"d5dvi0pjk7dgr7", "host"=>"ec2-23-21-94-137.compute-1.amazonaws.com"}

后跟同一个 PG::UndefinedTable ERROR 关系 'users' 不存在

数据库.yml:

development:
  adapter: sqlite3
  encoding: unicode
  database: chore_app_development
  pool: 5

test:
  adapter: sqlite3
  encoding: unicode
  database: chore_app_test
  pool: 5

production:
  adapter: postgresql
  database: chore_app_production
  pool: 5
  timeout: 5000

宝石文件:

source 'https://rubygems.org'
ruby '2.0.0'

gem 'rails', '4.0.1'

# Database
group :production do
  gem 'pg'
end

group :development, :test do
  gem 'sqlite3'
end

# Assets
gem 'sass-rails', '~> 4.0.0'
gem 'uglifier', '>= 1.3.0'
gem 'turbolinks'
gem 'haml-rails'
gem 'jquery-rails'

# Heroku
gem 'rails_12factor', group: :production

# Application
gem 'devise'
gem 'formtastic'

# Testing
gem 'factory_girl_rails'

【问题讨论】:

  • 你的 Gemfile 是什么样的?
  • 将其添加到帖子@jason328
  • Heroku 应用资源页面中是否有 postgresql 插件?
  • 是的,我有 Heroku Postgresql :: Olive,显然
  • 我需要把这里的用户名和密码放在我的database.yml中吗?如果是这样,我是否必须从版本控制中删除该文件(私人仓库,但仍然)

标签: ruby-on-rails ruby heroku ruby-on-rails-4 rails-postgresql


【解决方案1】:

我会先尝试

heroku restart

heroku rake db:migrate

如果这不起作用,请尝试。

heroku pg:reset DATABASE_URL   #Literally type in heroku pg:reset DATABASE_URL

heroku rake db:migrate

【讨论】:

  • 不幸的是,这就是我已经尝试过的。上面的输出来自运行heroku run rake db:migrate,运行 heroku restart 或 heroku pg:reset DATABASE_URL 不会改变错误。执行 heroku pg:reset 然后迁移也会产生相同的错误。
  • 有时最简单的解释是正确的
  • 对于像我这样笨的人来说,命令实际上是heroku pg:reset DATABASE_URL。我试图找出我的“database_url”是什么,但您不必担心(这是在 Heroku 上设置的环境变量)。只需输入heroku pg:reset DATABASE_URL 并开心。谢谢你的回答,杰森 :)
  • @FernandoPaladini,哦,见鬼,谢谢。在我偶然发现您的评论之前,我已经为此烦恼了好几个小时。
  • @lakesare,我实际上在回答中提到了这条评论。它不能足够突出让别人看到。我会解决的。
【解决方案2】:

我应该更仔细地阅读堆栈跟踪。我的 factory.rb 正在创建用户对象作为其他工厂的属性。将它们包装在一个块中修复它:

FactoryGirl screws up rake db:migrate process

【讨论】:

  • 我建议安装 PostgreSQL 的本地副本或在 Heroku [1] 上创建 PostgresSQL 的开发实例,然后从您的开发机器远程连接到它。这将确保开发中的行为与生产中的行为相同。 [1]heroku.com/postgres
【解决方案3】:

运行

heroku pg:reset DATABASE_URL

你就完成了。

【讨论】:

  • 字面意思是“DATABASE_URL”(我最初很困惑,想知道我应该在那里替换什么)
  • @Freedom_Ben 从字面上看是 :-)。它实际上是令人困惑的。
【解决方案4】:

Jason 的回答可能会解决您的问题,但我想详细说明您收到错误的原因以及如何解决它。

  1. 您不能在 Heroku 上运行“rake db:setup”,因为它会尝试创建数据库,而您的数据库已经存在于 Heroku 上

  2. 在您的 database.yml 中,您应该从环境变量中读取数据库 url,例如: 制作:url: <%= ENV["DATABASE_URL"] %>

  3. 我认为您遇到了第二个错误,因为您的迁移中有一些版本错误,从一开始就运行它们应该可以解决它: rake db:migrate VERSION=0

【讨论】:

    【解决方案5】:

    删除并重新创建数据库

    1. 在终端登录heroku
    2. cd 进入您的应用程序
    3. 运行

    heroku pg:重置数据库

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-01
      • 2020-05-31
      • 2014-06-16
      • 2013-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多