| 著作一覧 |
という課題を与えられたとする。
企業ではなく家庭。マニアックな人ではない。ルータと外部接続されているので、ルータのポートフォワーディングを利用する(用語は合ってるかな?)前提で、ポート80だけ公開してHTTPサーバーとしてのみの利用とする。
これがもし5年前なら、BSDのいずれかか、Linuxのいずれかのディストリビューションで決定と言えるだろう。
(開発用の実験サーバーだからMSDNで入手したWindowsサーバーという選択はあるとは思う)
でも、今だと以下からの選択となると思う。
・Linuxのいずれかのディストリビューション
・いずれかのBSD
・Windowsサーバー(MSDNで入手したものを開発用の実験サーバーとして立てる)
・Solaris 10 (x86)
・OS X(Mac miniの存在を考えれば、今となってはマニアックな選択とは思えない)
ここで、LinuxとBSDには「いずれかの」という選択が必要だと思う。でもマニアックな人は前提としていないから、選択が必要だというのは結構、荷が重い。すると当然のようにMSDNをサブスクリプトするとも思えないからWindowsサーバーという芽(目かな?)も無さそうだ。とすると、わざわざMac miniをそのために購入というのもあまり無さそうな気もしてくるのでOS Xという選択肢も消えてしまうかも。
という消去法でSolaris 10が残るのだけど、反論プリーズ。
もちろん、何をもってマニアックとそうではないの線引きをするかという点は主観に左右されるからぶれがあるのは当然なのでそのへんを含めて。
具体性を求めているのでLinux、という選択ではなく、Debian GNU/Linuxのカウボーイの名前のやつ(Woodyだっけ。でも今は次のやつになってたけど忘れた)、とか、単にBSDではなく、NetBSDのこれこれ、とか、そういった情報がありがたいです。
大した話ではないが、全部ActiveRecordでやれるとなんとなく便利かな、と。
MySQL 5.0.2からはCreate UserというSQLステートメントができたらしいし。
class MySQLAdmin < ActiveRecord::Schema
def self.create_user(user, password)
execute "create user #{user}@localhost identified by '#{password}'"
end
def self.drop_user(user)
execute "drop user '#{user}'@'localhost'"
end
def self.grant_to(user, database = '*')
execute "grant all privileges on #{database}.* to '#{user}'@'localhost'"
end
end
で、こんなふうに使う。
require 'rubygems'
require_gem 'activerecord'
require 'mysqladmin'
ActiveRecord::Base.establish_connection(
:adapter => 'mysql',
:host => 'localhost',
:username => 'scott', # rootだよ
:password => 'tiger',
:database => 'mysql'
)
# 既にデータベース、ユーザーが作成済みなら落とす
# 無ければ構わないので例外は無視
begin
MySQLAdmin.define do
drop_database :testdb
end
rescue
end
begin
MySQLAdmin.define do
drop_user :testuser
end
rescue
end
# データベースとそれ専用のユーザーを作って権限を与える
MySQLAdmin.define do
create_database :testdb
create_user :testuser, 'test'
grant_to :testuser, :testdb
# おまけ: charsetの設定方法が良くわからなくてはまった。
# こう書けばOK
create_table 'testdb.pages', { :options => 'character set utf8' } do |p|
p.column :id, :integer, :auto_increment => true
p.column :name, 'varchar(256)', :null => false
end
end
#mysqladmin.rb
module ActiveRecord
module ConnectionAdapters
class MysqlAdapter < AbstractAdapter
def create_user(user, password)
execute "create user #{user}@localhost identified by '#{password}'"
end
def drop_user(user)
execute "drop user '#{user}'@'localhost'"
end
def grant_to(user, database = '*')
execute "grant all privileges on #{database}.* to '#{user}'@'localhost'"
end
end
end
end
で、ActiveRecord::Schemaを使う。
...
require 'mysqladmin'
...
begin
ActiveRecord::Schema.define do
drop_database :testdb
end
rescue
end
begin
ActiveRecord::Schema.define do
drop_user :testuser
end
rescue
end
ActiveRecord::Schema.define do
create_database :testdb
create_user :testuser, 'test'
...
ジェズイットを見習え |