使用rake db:create:all创建Postgres RDS

时间:2015-09-18 23:05:06

标签: ruby-on-rails ruby postgresql amazon-web-services

我有一个应用程序,我正在迁移到Deis,并希望将RDS用于我的Postgres实例。我设置了Postgres,但如果我从本地计算机运行rake db:create:all,配置为指向RDS,我得到:

This task only modifies local databases. <db_name> is on a remote host.

有没有办法从现有迁移或schema.rb文件创建数据库?

更新1 这是database.yml文件。所有环境都继承默认

default: &default
adapter: postgresql
encoding: utf8
pool: 5
username: <db user I created>
password: <PW>
host: <my_unique_host>.us-east-1.rds.amazonaws.com
port: 5432

更新2 对于仅仅创建数据库然后像正常一样运行db:migrate的评论,这正是我没有看到的行为。如果我将数据库激活并运行rake db:migrate,则该过程完成,我将看到一个新的终端线。没有创建表/列。

我最好尝试进行本地数据库转储并将其恢复到RDS中吗?

更新3:解决方案 我已经解决了这个问题并想分享我的经验:

  1. 似乎从远程主机运行rake db:migrate命令无效。这可能是可能的,但我无法弄明白。
  2. 解决了这个问题实际上是在进入Deis群集的应用容器中并运行rake db:createrake db:migrate。这个回复说这个表已经创建了,我能够在psql提示符下验证。
  3. 希望这有帮助。

3 个答案:

答案 0 :(得分:2)

你必须手动完成rake db:create:all [1]完成的部分,所以连接到DBMS并通过运行命令创建db

private static string GetIdentifierName(IMethodSymbol within)
{
    var proposed = "x";

    while (within.Parameters.Any(x => x.Name == proposed))
    {
        proposed = "_" + proposed;
    }

    return proposed;
}

迁移可以通过CREATE DATABASE db_name CHARACTER SET utf8;

以正常方式完成

答案 1 :(得分:2)

更新3:解决方案我已经解决了这个问题并想分享我的经验:

  1. 似乎从远程主机运行rake db:migrate命令无法正常工作。这可能是可能的,但我无法弄明白。
  2. 解决了这个问题实际上是SSH进入Deis集群中的app容器并运行rake db:create和rake db:migrate。这个回复说这个表已经创建了,我能够在psql提示符下验证。
  3. 希望这有帮助。

答案 2 :(得分:0)

ActiveRecord::Tasks::DatabaseTasks::LOCAL_HOSTS << "192.168.1.1" # Replace with the IP you want to connect from

请记住,这是肮脏的hack,因为它会更改实际上具有更好私有性的常量,因此它可能随时停止运行。