2014-02-22 40 views
7

我读过所有sequel的文档,但我找不到创建数据库的方式,假设我可以这样做。如何创建一个数据库的续集

我跑耙的任务,因为这样的:

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 => '[email protected]') 
    } 

    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服务器吗?

回答

5

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

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

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

3

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

+0

如果我不能和Sequel一起使用,我可以使用像[cocaine](https://github.com/thoughtbot/cocaine)这样的工具来创建数据库吗? – Roland

-4

echo“create database REMOTE_TESTS”| mysql -u root

+0

您已阅读描述PostgreSQL的说明,对不对? – Roland

3

你可以用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的做法。

相关问题