簡體   English   中英

如何使用續集創建數據庫

[英]how do I create a database with 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服務器的手動過程嗎?

您可以使用CREATE DATABASE命令創建數據庫

使用postgresql時,要創建數據庫,首先以具有正確priveliges的用戶身份連接到template1數據庫,然后發出CREATE DATABASE命令。

如果您具有shell訪問權限,則可以使用方便的createdb shell命令。

您可以使用Sequel執行此操作,而無需使用命令行工具,這些工具在您使用腳本的每個系統上都可能無法使用。

通常,您將指定'postgres'數據庫以滿足'database'參數要求。

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如何做到的。

是的,這是一個手動過程。 數據庫是續集應該連接的配置的一部分,因此它必須在續集開始之前存在。

echo“create database REMOTE_TESTS”| mysql -u root

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM