2014-02-22 87 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的做法。

相關問題