トップ «前の日記(2006-01-30) 最新 次の日記(2006-02-01)» 編集

日々の破片

著作一覧

2006-01-31

_ もし今サーバーを立てるなら

という課題を与えられたとする。

企業ではなく家庭。マニアックな人ではない。ルータと外部接続されているので、ルータのポートフォワーディングを利用する(用語は合ってるかな?)前提で、ポート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のこれこれ、とか、そういった情報がありがたいです。

_ MySQL Admin

大した話ではないが、全部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'
  ...

2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|

ジェズイットを見習え