如何使用续集创建数据库

时间:2014-02-22 15:27:28

标签: ruby postgresql sequel

我已经阅读了所有sequel的文档,但我无法找到创建数据库的方法,假设我可以这样做。

我正在执行rake任务:

require 'rubygems'
require 'bundler/setup'

require 'pg'
require 'sequel'

require 'yaml'
require 'erb'


namespace :db do

  task :connect do

  end


  task :create => :connect do

    puts db_config

    Sequel.connect(db_config['production']){ |db|

      db.create_table :user do
        primary_key :id

        String :name
        String :email

      end

      user = db[:user]


      user.insert(:name => 'Roland', :email => 'rolandjitsu@gmail.com')
    }

  end

  task :drop => :connect do

  end

end

def db_config
  YAML.load(ERB.new(File.read('config/database.yml')).result)
end

但显然如果数据库不存在则不会创建数据库,所以我有点不确定我能做些什么。当我运行任务时,我得到:

PG::ConnectionBad: FATAL:  database "pulsr" does not exist

database.yml文件:

production: &production
  adapter: postgres
  host: localhost
  encoding: unicode
  database: pulsr
  username:
  password:

development:
  <<: *production

有谁知道我可以做些什么来创建数据库?这是启动postgresql服务器的手动过程吗?

4 个答案:

答案 0 :(得分:7)

您可以使用CREATE DATABASE命令创建数据库。

使用postgresql时,要创建数据库,首先以具有正确priveliges的用户身份连接到template1数据库,然后发出CREATE DATABASE命令。

如果您有shell访问权限,则可以使用方便的createdb shell命令。

答案 1 :(得分:6)

您可以使用Sequel执行此操作,而无需使用命令行工具,这些工具可能无法在您使用脚本的每个系统上使用。

通常,您将指定'postgres'数据库,以满足'数据库'参数要求。

production = db_config['production']

Sequel.connect(production.merge('database' => 'postgres')) do |db|
  db.execute "DROP DATABASE IF EXISTS #{production['database']}"
  db.execute "CREATE DATABASE #{production['database']}"
end

Sequel.connect(production) do |db|
  # ...
end

这也是ActiveRecord的作用。

答案 2 :(得分:4)

是的,这是一个手动过程。数据库是续集应该连接的配置的一部分,因此它必须在续集开始之前就已存在。

答案 3 :(得分:-4)

echo“create database REMOTE_TESTS”| mysql -u root