2009年10月29日

VMwareでbridge時のみHostとGuest間が通信NG

と言うわけでVMwarePlayerの最新版がリリースされたので早速インストールしてみました。

新機能の紹介などは他のサイトに譲ることにして、かなり面倒なハマリ方をしたので、状況と解決策を書いておきます。

で、問題の症状とは以下のような感じです。

  • ゲスト側の仮想NICをブリッジ設定にするとゲスト⇔ホスト間のネットワーク共有(SMB)などTCP通信全般が通らない(ネットワークドライブなどが繋がらない)
  • ブリッジ設定でもゲストからインターネットやホスト以外の物理マシンには通信できる
  • ホストからインターネットや他の物理マシンには通信できる
  • ゲストの仮想NICがNATやホストオンリーではホストと問題なく通信できる
  • いかなる場合でもゲスト⇔ホスト間のPingは問題なく通る
で、最初VMware側のバグかと思いあきらめかけていたのですが、それにしても症状が腑に落ちなかったのでを用いてパケットをキャプチャしてみたところ、

続きを読む...

Posted by Takuchan at 23:10 | コメント (0) | トラックバック(0)

RailsでReadonlyなmodel

Railsで更新は別のアプリが担当しているなどの理由で、読み取り専用でテーブルにアクセスしたい時がありますが、残念ながらRails自体には読み取り専用のモデルを作成する手段は無いようです。

と言うわけで、代替手段を探していたのですが、どうもスマートな手段が無く結局、readonly?メソッドを上書きして常にtrueを返すようにして、凌ぐようにしました。

ただ、それだけだと削除などが有効なため、結局以下のように一部メソッドでは直接ActiveRecord::ReadOnlyRecordをraiseしています。

以下、サンプルコードです

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Hoge < ActiveRecord::Base
  # 全レコードをReadOnlyということにしてCreate、Update系を阻害
  def readonly?
    return true
  end
 
  # テーブル自体の破壊を例外を返して阻止
  def before_destroy
    raise ActiveRecord::ReadOnlyRecord
  end
 
  # レコードの削除の際はreadonly?を確認しないようなので例外を返して阻止
  def self.delete(id)
    raise ActiveRecord::ReadOnlyRecord
  end
  def self.delete_all(conditions)
    raise ActiveRecord::ReadOnlyRecord
  end
  def self.delete_all!(conditions)
    raise ActiveRecord::ReadOnlyRecord
  end
end
続きを読む...

Posted by Takuchan at 21:46 | コメント (0) | トラックバック(0)