我已经阅读了所有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服务器的手动过程吗?
答案 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