著作一覧 |
という課題を与えられたとする。
企業ではなく家庭。マニアックな人ではない。ルータと外部接続されているので、ルータのポートフォワーディングを利用する(用語は合ってるかな?)前提で、ポート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' ...
ジェズイットを見習え |