TrinityT’s LABO このページをアンテナに追加 RSSフィード Twitter

2012-05-25 RC

Rails2.3.14+MySQL5.1でテーブル&カラムコメントをMigrationで追加する

以前書いたエントリPostgresqlでのコメントを追加したが、Rails2.3.14案件でテーブル&カラムコメントをつける必要が出たのでメモ。

パッチ

これをconfig/initializers/column_comment.rbにでも入れておけば、Migration時にコメントを付加してくれる。

注意点

Rails2.3.14のMigration部分を思い切りコピペして改造しているため、意図しない動きになるかもしれない。

# NOTICE : Rails2.3.14のActiveRecordを前提としている。
module ActiveRecord
  module ConnectionAdapters
    class MysqlAdapter
      def create_table(table_name, options = {})
        table_definition = TableDefinition.new(self)
        table_definition.primary_key(options[:primary_key] || Base.get_primary_key(table_name.to_s.singularize)) unless options[:id] == false

        yield table_definition if block_given?

        if options[:force] && table_exists?(table_name)
          drop_table(table_name, options)
        end

        create_sql = "CREATE#{' TEMPORARY' if options[:temporary]} TABLE "
        create_sql << "#{quote_table_name(table_name)} ("
        create_sql << table_definition.to_sql
        create_sql << ") #{options[:options]}"
        if options[:comment]
          create_sql << " COMMENT '#{options[:comment]}'"
        end
        execute create_sql
      end

      def add_column(table_name, column_name, type, options = {})
        add_column_sql = "ALTER TABLE #{quote_table_name(table_name)} ADD #{quote_column_name(column_name)} #{type_to_sql(type, options[:limit], options[:precision], options[:scale])}"
        add_column_options!(add_column_sql, options)
        if comment = options[:comment]
          add_column_sql = "#{add_column_sql} COMMENT '#{comment}'"
        end
        add_column_position!(add_column_sql, options)
        execute(add_column_sql)
      end

      def add_column_comment(table_name, column_name, comment = "")
        current_type = select_one("SHOW COLUMNS FROM #{quote_table_name(table_name)} LIKE '#{column_name}'")["Type"]
        add_comment_sql = "ALTER TABLE #{quote_table_name(table_name)} CHANGE #{quote_column_name(column_name)} #{quote_column_name(column_name)} #{current_type} COMMENT '#{comment}'"
        execute(add_comment_sql)
      end

      def add_table_comment(table_name, comment = "")
        add_comment_sql = "ALTER TABLE #{quote_table_name(table_name)} COMMENT '#{comment}'"
        execute(add_comment_sql)
      end

    end

    class ColumnDefinition
      attr_accessor :comment
      alias :_orig_to_sql :to_sql
      def to_commented_sql
        self.comment ? "#{_orig_to_sql} COMMENT '#{self.comment}'" : _orig_to_sql
      end
      alias to_sql :to_commented_sql
    end

    class TableDefinition
      alias :_orig_column :column
      def column(name, type, options = {})
        _orig_column(name, type, options)
        if comment = options[:comment]
          column = @columns.find { |col| col.name == name }
          pos = @columns.index(column)
          @columns[pos].comment = comment
        end
        self
      end
    end
  end
end

migrationファイルの書き方

以下の通り:commentオプション or 引数にで対応。

●テーブル作成時
    create_table :hoge_masters, :comment => "hogehoge" do |t|
      t.string   :code, :comment => "fugafuga"
    end
●カラム追加時
    add_column    :hoge_masters, :value, :integer, :comment => "コメコメ"
●テーブルコメント追加 ※独自作成機能
    add_table_comment    :hoge_masters, "テステス"
●カラムコメント追加   ※独自作成機能
    add_column_comment   :hoge_masters, :effective_value, "コメコメ111"

2012-04-25 snip

特定文字置換スニペット

一括置換をRubyスクリプトで作成したのでメモ。bashシェルに貼りつければ変更可能。

Railsカラム名ルールの統一等で重宝した。

find -name '*.rb' | xargs ruby -i -e '
names=[
["hogehoge","hugahuga"],
["col_name","name_col"]
]
ARGF.each do |line|
  names.each do |name|
    line.gsub!(name[0].to_s, name[1].to_s)
  end
  puts line
end
'

2012-03-05

Windows上でCapsLock→Ctrl等のキー入れ替え

結構多用するのでメモ。

手順

「CapsLock→Ctrlに差し替え」「Esc↔半角/全角キー入れ替え」をしている。

  1. レジストリエディタを開く ※regedit
  2. 「HKEY_LOCAL_MACHINE→SYSTEM→CurrentControlSet→Control→Keyboard Layouts」に移動
  3. バイナリデータ「Scancode Map」を作成
  4. 以下を記入して再起動

0000000000000000
0300000001002900
1D003A0000000000

参考URL

2012-03-02 UV

UbuntuでVNCサーバを立てる方法

sudo apt-get install vnc4server
rm .vnc/xstartup # すでに存在している場合のみ実行
ln -s /etc/X11/Xsession ~/.vnc/xstartup # ログイン画面に通常のXを使う
vncserver # 起動。初回起動時はVNC接続時のパスワード等を聞かれるので任意で設定。

※↓サービス化する場合は以下参照。

http://www.obenri.com/_vnc/vnc_server1.html

http://yasu1973fc2.blog99.fc2.com/blog-entry-30.html

2012-02-16 SK

GnomeShellのシステムトレイからSkypeアイコンが消える件&暫定対策

GnomeShellでSkype起動中のアイコンがいつの間にか消える現象が多発。

どうやらGnomeShellとSkypeの相性がまずく、画面ロックやスクリーンセーバ起動等のタイミングでアイコンが消え去ってしまうらしい。

去年秋にLaunchpadバグ報告が上がっているが対策はされる気配がない。※参考URL

このせいで「Skypeアイコン無い→Skype起動しよう→バックグラウンドで生きているので[他のSkypeが起動中です]メッセージ→イラッ」というトラップに引っかかりまくるので、以下のように暫定対策を行った。

対策方法

(1)skype起動ファイルを移動

mv /usr/bin/skype /usr/bin/skype.orig

(2)以下スクリプトファイル作成

/usr/bin/skype

#!/bin/bash
killall skype.orig > /dev/null
sleep 5
skype.orig

これで必ず古いプロセスを落としてから起動するようになるのでイライラも減少。

参考URL

https://bugs.launchpad.net/ubuntu/+source/gnome-shell/+bug/848565