【问题标题】:Heroku Push ErrorsHeroku 推送错误
【发布时间】:2012-01-28 21:56:45
【问题描述】:

下午好,

我浏览了关于这个主题的其他问题,似乎没有人问过这个问题。我原本期待的不是这样!

无论如何 - 我有一个 PostgreSQL 数据库服务器在我的本地机器上运行,并带有一个 MYAPP_DEVELOPMENT 数据库。我试着做一个

heroku db:push

但不断收到以下错误:

Failed to connect to database:
Sequel::DatabaseConnectionError -> PGError: FATAL:  role "brandon" does not exist

这显然与本地/heroku 共享数据库上的权限和用户有关,但老实说,我对这种东西不太擅长。任何帮助,将不胜感激。我目前在 Heroku 的 slug 中包含“database.yml”文件,该文件包含我本地数据库的所有登录名/密码信息......因此我没想到会出现这种错误。

谢谢!

** 编辑 ** 这是我的 database.yml 文件的内容(为清楚起见进行了编辑):

common: &common
  adapter: postgresql
  encoding: unicode
  username: user
  password: secret

test:
  <<: *common
  database: myapp_test

development:
  <<: *common
  database: myapp_development

production:
  <<: *common
  database: myapp_production

我认为这一定是 Heroku 设置方面的问题。请注意,我的 database.yaml 文件中没有任何地方出现“brandon”。我不太确定它是从哪里拉出来的。我的数据库用户名不是那个(虽然那是我的名字哈哈)

【问题讨论】:

    标签: ruby-on-rails database postgresql heroku push


    【解决方案1】:

    此错误通常表示在您的database.yml 文件中的适当环境下未指定username

    您的 database.yml 文件应类似于以下内容(我在本地使用 MySQL,因此使用了 adaptersocket 参数):

    common: &common
      adapter: mysql2
      encoding: utf8
      reconnect: false
      pool: 5
      username: <your_username>
      password: <your_password>
      socket: /tmp/mysql.sock
    
    development:
      <<: *common
      database: appname_dev
    
    test:
      ...
    
    staging:
      ...
    
    production:
      <<: *common
      database: appname_prod
    

    如果这不能解决您的问题,请检查以确保 Heroku 在正确的环境中运行:

    • heroku config --app &lt;appname&gt;
    • 确保RACK_ENV 设置为production
    • 如果不是:heroku config:add RACK_ENV=production --app &lt;appname&gt;

    (如果您粘贴 database.yml 文件的内容会很有帮助。)

    【讨论】:

    • 上面包含了我的databse.yml文件的内容。 Heroku 在生产环境中运行。感谢您的回答!
    【解决方案2】:

    您必须使用 Heroku 特定的 ENV var 才能使用 DB,通常是 ENV['DATABASE_URL']

    编辑:如果你有一个像 datamapper 这样的数据库映射器,你会这样写:

    DataMapper.setup(:default, ENV['DATABASE_URL'] || LOCAL_DB_URL)
    

    然后使用 Heroku DB(如果存在)或默认为存储在 LOCAL_DB_URL 变量中的本地 DB。

    【讨论】:

    • 我的 heroku ENV['DATABASE_URL'] 设置为 postres://blahhhhh.amazonws.com/blah 值...(即我没有使用外部数据库)。 db:push 不应该只在这些条件下工作吗?
    • heroku 为你设置了 ENV 变量。你只需要使用它。但这在 Heroku 文档中。
    • 感谢您回复我。然后如何在我的 Heroku 配置和/或 database.yml 文件中进行设置?我正在使用 ActiveRecord 和 Postgres 数据库。我可以发誓我之前已经将我的本地开发数据库推送到 Heroku 没有任何摆弄
    【解决方案3】:

    感谢大家对此的投入。我最终通过在 db:push 期间向 Heroku 明确提供我的登录详细信息来解决我的问题...例如:

    heroku db:push postgres://postgres:PASSWORD@127.0.0.1:5432/DATABASE
    

    不知道为什么它不使用我的 database.yml 文件中的(相同的)信息,但是哦。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-25
      • 2011-12-13
      • 1970-01-01
      • 2012-03-10
      • 2012-06-12
      • 2011-11-01
      • 1970-01-01
      • 2013-11-21
      相关资源
      最近更新 更多