<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
   <title>マルッと！</title>
   <link rel="alternate" type="text/html" href="http://i-am.web777.net/" />
   <link rel="self" type="application/atom+xml" href="http://i-am.web777.net/atom.xml" />
   <id>tag:i-am.web777.net,2008://1</id>
   <updated>2008-04-18T08:17:32Z</updated>
   <subtitle>京都で働く技術屋さんの一口メモ</subtitle>
   <generator uri="http://www.sixapart.com/movabletype/">Movable Type 3.31-ja</generator>

<entry>
   <title>「ProjectPier」 の iCal が GoogleCalendar で文字化け</title>
   <link rel="alternate" type="text/html" href="http://i-am.web777.net/2008/04/projectpier.html" />
   <id>tag:i-am.web777.net,2008://1.44</id>
   
   <published>2008-04-18T08:00:32Z</published>
   <updated>2008-04-18T08:17:32Z</updated>
   
   <summary>ProjectPierはactiveCollabから派生したソフトウェアで、その...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="ja" xml:base="http://i-am.web777.net/">
      <![CDATA[<blockquote>ProjectPierはactiveCollabから派生したソフトウェアで、その特徴としてデザインがしっかりしており使い勝手が良いということが挙げられる。これはWeb2.0風に奇麗という訳ではない。シンプルでわかりやすいという事だ。</blockquote>

MOONGIFT様のブログにこんな記事を発見。
<a href="http://www.moongift.jp/2007/09/projectpier/">http://www.moongift.jp/2007/09/projectpier/</a>

早速使ってみると、なるほど、これは簡単で使いやすい。おススメです。

プロジェクトを作る
 → タスクリストを作る
 → マイルストーンを切ってタスクリストを割り当てる

というごく単純な仕組みですがわかりやすいし導入には非常にいいなという印象を持ちました。]]>
      <![CDATA[マイルストーンはiCal形式での出力に対応しているようなので、Googleカレンダーに読み込んでやろうとしたところ･･･文字化けしてしまいました。

そこで、他の iCal 形式のカレンダーを提供しているサービスと比較してみることに。
<a href="http://weather.livedoor.com/weather_hacks/ical.html">http://weather.livedoor.com/weather_hacks/ical.html</a>

ここのカレンダーは問題なく読み込める。
ということはProjectPier側で修正できるはず･･･

で、レスポンスのヘッダーを比べてみると、こんな違いが。

<pre><code>
 # ProjectPier
Content-Type: text/Calendar
---
 # iCal 天気
Content-Type: text/calendar; charset=utf-8
</code></pre>

これが怪しい。

そこでgrepをかけてみるとこんなファイルを発見。

application/layouts/ical.php
<pre><code class="php">
<?php header('Content-Type: text/Calendar'); ?>
<?php echo $content_for_layout ?>
</code></pre>

これをこんな風に書き換えてみる。

<pre><code class="php">
<?php header('Content-Type: text/calendar; charset=utf-8'); ?>
<?php echo $content_for_layout ?>
</code></pre>

で、やってみると･･･


できました！！


GoogleカレンダーにiCalを読み込ませるときは、レスポンスのヘッダーで文字コードをちゃんと指定しないとだめみたいですね。]]>
   </content>
</entry>
<entry>
   <title>Lost connection to MySQL server エラー</title>
   <link rel="alternate" type="text/html" href="http://i-am.web777.net/2008/04/lost_connection_to_mysql_serve.html" />
   <id>tag:i-am.web777.net,2008://1.43</id>
   
   <published>2008-04-12T15:40:46Z</published>
   <updated>2008-04-12T15:53:04Z</updated>
   
   <summary> Mysql::Error: Lost connection to MySQL ...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="ja" xml:base="http://i-am.web777.net/">
      <![CDATA[Mysql::Error: Lost connection to MySQL server during query: SHOW TABLES

とかいうエラーが頻繁に発生するようになった。

mysql の <a href="http://dev.mysql.com/doc/refman/4.1/ja/packet-too-large.html">Packet too large エラー</a> が原因という記事を見つけたので my.cnf を編集する。

<pre><code class="mysql">
max_allowed_packet = 16M
</code></pre>

一応、エラーは発生しなくなった･･･ので、一応これでよかったみたい。

これで解決しない方は、他にもいろいろと対処法記事があるので、そういうのも試してみるといいかもしれません。

参考サイト
<ul>
<li><a href="http://idm.s9.xrea.com/ratio/2006/04/08/000406.html">http://idm.s9.xrea.com/ratio/2006/04/08/000406.html</a></li>
</ul>]]>
      
   </content>
</entry>
<entry>
   <title>rails でテンプレートのディレクトリを切り替える</title>
   <link rel="alternate" type="text/html" href="http://i-am.web777.net/2008/04/rails_1.html" />
   <id>tag:i-am.web777.net,2008://1.42</id>
   
   <published>2008-04-11T01:39:42Z</published>
   <updated>2008-04-11T02:35:41Z</updated>
   
   <summary> 例えば、携帯からのリクエストの時だけ、app/mobile_views の下の...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="ja" xml:base="http://i-am.web777.net/">
      <![CDATA[例えば、携帯からのリクエストの時だけ、app/mobile_views の下のテンプレートを使用するようにしたいような場合は、ActionController::Base の クラスメソッド view_paths=(*attr) を使う。

昔の template_root=(root) が変わって、ビューを検索するディレクトリーを複数選択できるようになってる。

例えばこんな感じでテンプレートパスを書き換えられそう。

<pre><code class="ruby">
  before_filter :select_view_paths

  protected
  def select_view_paths
     if mobile?
        self.view_paths = "#{RAILS_ROOT}/app/mobile_views/"
     else
        self.view_paths = "#{RAILS_ROOT}/app/views/"
     end        
  end
</code></pre>

参考URL
<ul>
<li><a href="http://d.hatena.ne.jp/yssk22/20080122">http://d.hatena.ne.jp/yssk22/20080122</a>
</ul>]]>
      
   </content>
</entry>
<entry>
   <title>Array をシャッフルする</title>
   <link rel="alternate" type="text/html" href="http://i-am.web777.net/2008/04/array.html" />
   <id>tag:i-am.web777.net,2008://1.41</id>
   
   <published>2008-04-09T05:50:46Z</published>
   <updated>2008-04-09T05:57:09Z</updated>
   
   <summary> Arrayをシャッフルしようと下記のようなコードを書いてみました。 class...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="ja" xml:base="http://i-am.web777.net/">
      <![CDATA[Arrayをシャッフルしようと下記のようなコードを書いてみました。

<pre><code class="ruby">
class Array

  def shuffle!
    size.downto(1) { |n| push delete_at(rand(n)) }
    self
  end

end
</code></pre>

]]>
      <![CDATA[ところが、これを rails で動かそうとすると、ArgumentErrorが発生してなぜか動かない。

調べてみると、このファイルを発見。
activesupport-2.0.2/lib/active_support/core_ext/array/random_access.rb

ActiveSupportが、配列の要素にランダムにアクセスするメソッドを追加していました。
おいおい･･･

で、コードを下記のように変更。
<pre><code class="ruby">
class Array

  def shuffle!
    size.downto(1) { |n| push delete_at(Kernel.rand(n)) }
    self
  end

end
</code></pre>
]]>
   </content>
</entry>
<entry>
   <title>rails で Capistrano2.1 入門(2) ～ タスクを作る</title>
   <link rel="alternate" type="text/html" href="http://i-am.web777.net/2007/11/rails_capistrano21_2.html" />
   <id>tag:i-am.web777.net,2007://1.40</id>
   
   <published>2007-11-27T09:25:29Z</published>
   <updated>2007-11-27T09:35:04Z</updated>
   
   <summary> 前回の続きです rails で Capistrano2.1 入門 今回は Ca...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="ja" xml:base="http://i-am.web777.net/">
      <![CDATA[前回の続きです
<a href="http://i-am.web777.net/2007/11/rails_capistrano21.html">rails で Capistrano2.1 入門</a>

今回は Capistrano で実行するタスクを作ってみようと思います。


config/deproy.rb に以下を追記。
Httpdを再起動するためのタスクです。

<pre><code class="ruby">
namespace :deploy do

  task :restart_web_server, :roles => :web do
    sudo "/etc/init.d/httpd restart", :as => "root"
  end

end
</code></pre>]]>
      <![CDATA[その上で

<pre><code class="sh">
$ cap -Tv
</code></pre>

とすると、

...
cap deploy:restart_web_server # 
...

上記が表示されるはずです。

以下のようにするとコマンドを実行できます。
<pre><code class="sh">
$ cap deploy:restart_web_server
</code></pre>

]]>
   </content>
</entry>
<entry>
   <title>rails で Capistrano2.1 入門</title>
   <link rel="alternate" type="text/html" href="http://i-am.web777.net/2007/11/rails_capistrano21.html" />
   <id>tag:i-am.web777.net,2007://1.39</id>
   
   <published>2007-11-21T17:45:01Z</published>
   <updated>2007-11-22T04:42:45Z</updated>
   
   <summary> http://www.capify.org/ バージョンが2.1にあがって初め...</summary>
   <author>
      <name></name>
      
   </author>
   
   <category term="" label="" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="" label="" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="ja" xml:base="http://i-am.web777.net/">
      <![CDATA[<a href="http://www.capify.org/">http://www.capify.org/</a>

バージョンが2.1にあがって初めて使ったのでまとめておきます。

まずはインストール。
<pre><code class="sh">
gem install -y capistrano
</code></pre>
]]>
      <![CDATA[rails のプロジェクトに対応させる

RAILS_ROOT で以下のコマンドを実行。
<pre><code class="sh">
capify .
</code></pre>

以下のファイルができます。

<ul>
<li>Capfile
<li>config/deploy.rb
</ul>


deploy.rb を編集

<pre><code class="ruby">

set :application, "Myapp" # アプリケーション名を指定
set :repository,  "http://svn.sourcecode.com/project/trunk"  #リポジトリのURLを指定
set :user, "rails" # deploy先にログインするためのユーザーを指定

# If you aren't deploying to /u/apps/#{application} on the target
# servers (which is the default), you can specify the actual location
# via the :deploy_to variable:
set :deploy_to, "/var/www/#{application}"  # デプロイ先サーバー上のディレクトリを指定

# If you aren't using Subversion to manage your source code, specify
# your SCM below:
set :scm, :subversion

# Application、Web、DB 各サーバーのドメインを指定
role :app, "i-am.web777.net"  
role :web, "i-am.web777.net" 
role :db,  "i-am.web777.net", :primary => true

</code></pre>

これで基本設定は終了。
以下のコマンドで、タスク一覧が見えます。
<pre><code class="sh">
cap -T
</code></pre>


試しにdeploy 先サーバーにディレクトリの設置をしてみます。
SSHで接続できることを確認しておきましょう。

<pre><code class="sh">
cap deploy:setup
</code></pre>

deploy 先に
/var/www/Myapp
ができていれば成功。

次回はタスクを作ってみます。]]>
   </content>
</entry>
<entry>
   <title>rails で model の変更を監視するプラグイン</title>
   <link rel="alternate" type="text/html" href="http://i-am.web777.net/2007/11/rails_model.html" />
   <id>tag:i-am.web777.net,2007://1.38</id>
   
   <published>2007-11-21T09:11:01Z</published>
   <updated>2007-11-21T09:29:41Z</updated>
   
   <summary> acts_as_modified モデルの変更を監視して、各 attribut...</summary>
   <author>
      <name></name>
      
   </author>
   
   <category term="" label="" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="" label="" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="ja" xml:base="http://i-am.web777.net/">
      <![CDATA[acts_as_modified

モデルの変更を監視して、各 attribute が変更されたかどうかを確認することができます。
「あるカラムに変更があった際にだけ、なにかしらの処理を行う」などという場合に便利。


インストールは普通にすればOK

<pre><code class="sh">
./script/plugin install acts_as_modified
</code></pre>]]>
      <![CDATA[使用法をまとめると以下のような感じ

<pre><code class="ruby">

 class Person < ActiveRecord::Base
   acts_as_modified
 end

 p = Person.find( :first )
 p.name # => "げんさん"
 p.modified? # => false
 p.name = "ネオ・げんさん"
 p.original_name # => "げんさん"
 p.modified? # => true
 p.name_modified? # => true
 p.modified_attributes # => {:name => "げんさん"}

 #restore
 p.restore_attributes :only => [:name] 
 p.name # => "げんさん"

</code></pre>

参考サイト
<ul>
<li><a href="http://agilewebdevelopment.com/plugins/acts_as_modified">http://agilewebdevelopment.com/plugins/acts_as_modified</a>
<li><a href="http://rubyist.g.hatena.ne.jp/yamaz/20060917">http://rubyist.g.hatena.ne.jp/yamaz/20060917</a>
</ul>
]]>
   </content>
</entry>
<entry>
   <title>acts_as_paranoid でエラー</title>
   <link rel="alternate" type="text/html" href="http://i-am.web777.net/2007/11/acts_as_paranoid.html" />
   <id>tag:i-am.web777.net,2007://1.37</id>
   
   <published>2007-10-31T16:53:54Z</published>
   <updated>2007-11-21T09:26:38Z</updated>
   
   <summary> ActiveRecord 削除フラグで削除するプラグインの続き rails 1...</summary>
   <author>
      <name></name>
      
   </author>
   
   <category term="" label="" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="" label="" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="ja" xml:base="http://i-am.web777.net/">
      <![CDATA[<a href="http://i-am.web777.net/2007/01/activerecord.html">ActiveRecord 削除フラグで削除するプラグイン</a>の続き

rails 1.2.5 で、acts_as_paranoid を使うとエラー発生

<pre><code>
NoMethodError (undefined method `construct_count_options_from_args' for User:Class):
</code></pre>

などと怒られる。rails のバージョンアップが影響しているみたい。

<pre><code class="ruby">
          def count_with_deleted(*args)
            #calculate_with_deleted(:count, *construct_count_options_from_args(*args))
            calculate_with_deleted(:count, *construct_count_options_from_legacy_args(*args))
          end
</code></pre>

上記のように修正すると動きます。]]>
      
   </content>
</entry>
<entry>
   <title>ActiveRecordでデフォルトの並び順を指定</title>
   <link rel="alternate" type="text/html" href="http://i-am.web777.net/2007/10/activerecord_1.html" />
   <id>tag:i-am.web777.net,2007://1.36</id>
   
   <published>2007-10-20T16:32:22Z</published>
   <updated>2007-11-20T16:50:33Z</updated>
   
   <summary> model を検索する際に、デフォルトの順序を指定したい場合に使うプラグインを...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="ja" xml:base="http://i-am.web777.net/">
      <![CDATA[model を検索する際に、デフォルトの順序を指定したい場合に使うプラグインを発見

<a href="http://blog.gwikzone.org/pages/ruby_on_rails_default_order_plugin">http://blog.gwikzone.org/pages/ruby_on_rails_default_order_plugin</a>

<pre><code class="ruby">
class Contact < ActiveRecord::Base
  order_by :fields => ['last_name', 'first_name'], :mode => :desc
end
</code></pre>

こんな感じで使うみたい。

]]>
      <![CDATA[インストール方法は以下の通り。

<pre><code class="shell">
$ cd myrailsapp/vendor/plugins
$ svn checkout http://svn.gwikzone.org/public/default_order/trunk default_order
</code></pre>]]>
   </content>
</entry>
<entry>
   <title>Capistrano で簡単にメンテナンス画面表示（２）</title>
   <link rel="alternate" type="text/html" href="http://i-am.web777.net/2007/06/capistrano_3.html" />
   <id>tag:i-am.web777.net,2007://1.35</id>
   
   <published>2007-06-14T16:20:37Z</published>
   <updated>2007-07-13T12:14:22Z</updated>
   
   <summary> http://i-am.web777.net/2007/01/capistra...</summary>
   <author>
      <name></name>
      
   </author>
   
   <category term="" label="" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="" label="" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="" label="" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="ja" xml:base="http://i-am.web777.net/">
      <![CDATA[<a href="http://i-am.web777.net/2007/01/capistrano.html">http://i-am.web777.net/2007/01/capistrano.html
</a>
上記エントリーの続き

メンテナンス画面は、カレントディレクトリに maintenance.rhtml がある場合はこちらがテンプレートとして使用される。

単純に RAILS_ROOT に maintenance.rhtml を設置してもよいが、あまり綺麗じゃないので、少し disable_web タスクを少し変更してみる。
]]>
      <![CDATA[テンプレートを config/templates/maintenance.rhtml に配置して config/deploy.rb に以下のように記述。

<pre><code class="ruby">
task :disable_web do
  # Get the current path
  dir = `pwd`.chomp

  # Copy the template to the current path (this is where 'render' looks)
  `cp #{dir}/config/templates/maintenance.rhtml #{dir}/maintenance.rhtml`

  # Read in file with replacements
  maintenance = render("maintenance", :deadline => ENV['UNTIL'], :reason => ENV['REASON'])

  # Copy to the server
  put maintenance, "#{shared_path}/system/maintenance.html", :mode => 0644

  # Remove local copy
  `rm #{dir}/maintenance.rhtml`

  # Just in case something goes wrong, clean up
  on_rollback do
    `rm #{dir}/maintenance.rhtml`
    delete "#{shared_path}/system/maintenance.html"
  end
end
</code></pre>

これでOK。

参考サイト
<ul>
<li><a href="http://www.fivesevensix.com/posts/2006/01/18/customizing-disable_web-for-multiple-sites">http://www.fivesevensix.com/posts/2006/01/18/customizing-disable_web-for-multiple-sites</a>
<li><a href="http://fg-180.katamayu.net/archives/2007/05/12/222045">http://fg-180.katamayu.net/archives/2007/05/12/222045</a>

</ul>]]>
   </content>
</entry>
<entry>
   <title>Rails で mysql の ENUM カラムを使用する</title>
   <link rel="alternate" type="text/html" href="http://i-am.web777.net/2007/03/rails_mysql_enum.html" />
   <id>tag:i-am.web777.net,2007://1.34</id>
   
   <published>2007-03-29T03:03:03Z</published>
   <updated>2007-07-13T12:15:07Z</updated>
   
   <summary> enum-column というプラグインがあります。 これをインストールするこ...</summary>
   <author>
      <name></name>
      
   </author>
   
   <category term="" label="" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="" label="" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="" label="" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="" label="" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="ja" xml:base="http://i-am.web777.net/">
      <![CDATA[enum-column というプラグインがあります。
これをインストールすることで、mysqlのenumカラムを使用できるようになります。

まずはインストール
<pre><code class="sh">
./script/plugin install enum-column
</code></pre>

DBのスキーマはこんな感じでを記述します。
<pre><code class="ruby">
  create_table :enumerations, :force => true do |t|
    t.column :severity, :enum, :limit => [:low, :medium, :high, :critical],
       :default => :medium
    t.column :color, :enum, :limit => [:red, :blue, :green, :yellow]
    #...
  end
</code></pre>
]]>
      <![CDATA[<br>
エラーチェックは、モデルに以下のように記述。
<pre><code class="ruby">
  validates_columns :severity, :color
</code></pre>

コードの中では、値はシンボルで扱われます。
<pre><code class="ruby">
    @e = Enumeration.new
    @e.severity = :low
</code></pre>

ビュー内で、

<pre><code class="html">
 <%= input 'e', 'severity' >
</code></pre>

このように記述すると、以下のようなHTMLが返ります。

<pre><code class="html">
     <select id="e_severity" name="e[severity]">
        <option value="low">low</option>
        <option value="medium" selected="selected">medium</option>
        <option value="high">;high</option>
        <option value="critical">critical</option>
     </select>
</code></pre>

結構便利。

参考URL
<ul>
<li><a href="http://wiki.rubyonrails.org/rails/pages/Enum+Column+in+MySql">http://wiki.rubyonrails.org/rails/pages/Enum+Column+in+MySql</a>
</ul>]]>
   </content>
</entry>
<entry>
   <title>mysqldump で文字化け</title>
   <link rel="alternate" type="text/html" href="http://i-am.web777.net/2007/03/mysqldump.html" />
   <id>tag:i-am.web777.net,2007://1.33</id>
   
   <published>2007-03-08T15:38:42Z</published>
   <updated>2007-03-08T16:09:06Z</updated>
   
   <summary> mysql で utf8 を使う参照 mysqlの日本語設定をした際に、以前か...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="ja" xml:base="http://i-am.web777.net/">
      <![CDATA[<a href="http://i-am.web777.net/2007/03/mysql_utf8.html#more">mysql で utf8 を使う</a>参照

mysqlの日本語設定をした際に、以前から運用しているDatabaseがある場合、環境変数、character_set_database が、utf8になっていない場合がある。（例えば、latin1になっている。）

この場合、TABLE の CHARSET が、UTF8になっていない可能性が高く、SELECT 結果の表示が文字化けしてしまったり、mysqldump の結果が文字化けしてしまったりといった問題が発生する。

mysqldumpの文字化けは、--default-character-set オプションをつけることで解決できる。
<pre><code class="sh">
mysqldump -uUser -pPassword --compact --default-character-set=binary hageDb > hage.sql
</code></pre>
]]>
      <![CDATA[hoge.sql の中身を確認してみると、

<pre><code class="sql">
DROP TABLE IF EXISTS `db_name`;
CREATE TABLE `db_name` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(255) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
</code></pre>

確かに、<strong>DEFAULT CHARSET=latin1</strong> となっている。

これを sed で変換してリストアするスクリプトを書いてみた。

<pre><code class="sh">
#!/bin/bash

echo "Convert Database : $1"

mysqldump -u root --compact --default-character-set=binary　$1 > org.sql
sed 's/latin1/utf8/g' org.sql > conv.sql
mysql -u root -e "drop database $1"
mysql -u root -e "create database $1"
mysql -u root $1 < conv.sql
</code></pre>

スクリプトにするほどの物ではないけど･･･
引数のエラーチェックとかないから気をつけて使ってください。

参考サイト
<ul>
<li><a href="http://as-is.net/blog/archives/001141.html">http://as-is.net/blog/archives/001141.html</a>
<li><a href="http://cheebow.info/chemt/archives/2006/10/utf8mysqldump.html">http://cheebow.info/chemt/archives/2006/10/utf8mysqldump.html</a>
</ul>]]>
   </content>
</entry>
<entry>
   <title>mysql で utf8 を使う</title>
   <link rel="alternate" type="text/html" href="http://i-am.web777.net/2007/03/mysql_utf8.html" />
   <id>tag:i-am.web777.net,2007://1.32</id>
   
   <published>2007-03-07T15:18:56Z</published>
   <updated>2007-03-09T03:20:20Z</updated>
   
   <summary> mysql 4.1以降で日本語を使うための設定方法。 UTF8を使います。 /...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="ja" xml:base="http://i-am.web777.net/">
      <![CDATA[mysql 4.1以降で日本語を使うための設定方法。
UTF8を使います。

/etc/my.cnf に以下のような記述を書き足しておく。

<pre><code class="conf">
[mysql]
default-character-set=utf8

[mysqld]
default-character-set=utf8
character_set_server=utf8
skip-character-set-client-handshake
</code></pre>

skip-character-set-client-handshake は、「サーバーの文字コード設定をクライアントでもそのまま使う」という意味らしい。

で、mysqlを再起動。

]]>
      <![CDATA[確認方法。

<pre><code>
mysql> SHOW VARIABLES LIKE 'character\_set\_%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| character_set_client     | utf8  |
| character_set_connection | utf8  |
| character_set_database   | utf8  |
| character_set_results    | utf8  |
| character_set_server     | utf8  |
| character_set_system     | utf8  |
+--------------------------+-------+
6 rows in set (0.00 sec)
</code></pre>

参考URL
<ul>
<li><a href="http://www.in-vitro.jp/blog/index.cgi/Misc/20060520_01.htm">http://www.in-vitro.jp/blog/index.cgi/Misc/20060520_01.htm</a>
</ul>]]>
   </content>
</entry>
<entry>
   <title>Capistrano でデプロイ時に依存ライブラリをインストール</title>
   <link rel="alternate" type="text/html" href="http://i-am.web777.net/2007/02/capistrano_2.html" />
   <id>tag:i-am.web777.net,2007://1.31</id>
   
   <published>2007-02-17T02:13:31Z</published>
   <updated>2007-02-17T02:25:44Z</updated>
   
   <summary> 複数のサーバーにデプロイする場合など、インストールの手続きを自動化しておけると...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="ja" xml:base="http://i-am.web777.net/">
      <![CDATA[複数のサーバーにデプロイする場合など、インストールの手続きを自動化しておけると便利です。

今回は、RMagickのインストールを自動化してみます。

config/deploy.rb に以下のように記述。

<pre><code class="ruby">
desc "Install RMagick"
task :install_rmagick do
  sudo "yum install ImageMagick -y"
  sudo "yum install ImageMagick-devel -y"
  sudo "gem install rmagick --include-dependencies"
end

task :before_migrate do
  install_rmagick
end
</code></pre>

これで、migrate タスクが実行される前に、RMagickがインストールされます。
少々めんどくさいですが、一回使用した後はコメントアウトしておけばいいかなと。

まったく新しいサーバーにデプロイすることなんかそう頻繁には起こらないとは思うので、有用性は低いですが、書いておけば、デプロイ時にライブラリの依存関係で悩む事はなくなります。

備忘録としての役割が強いかな。
]]>
      
   </content>
</entry>
<entry>
   <title>rails で 画像認証 captcha</title>
   <link rel="alternate" type="text/html" href="http://i-am.web777.net/2007/02/rails_captcha.html" />
   <id>tag:i-am.web777.net,2007://1.30</id>
   
   <published>2007-02-17T01:49:54Z</published>
   <updated>2007-02-17T02:12:53Z</updated>
   
   <summary> validates_captchaは、rails で、画像認証 captcha...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="ja" xml:base="http://i-am.web777.net/">
      <![CDATA[validates_captchaは、rails で、画像認証 captcha ができるようになるプラグインです。
RMagickに依存していています。

インストール。
<pre><code class="sh">
script/plugin install http://svn.2750flesk.com/plugins/trunk/validates_captcha
</code></pre>

で、次に、設定ファイルと、必要ディレクトリを用意します。以下のコマンドを実行すればOK。

<pre><code class="sh">
script/generate captcha config
script/generate captcha image_directory
script/generate captcha store_directory
</code></pre>

config/captcha.yml で、ディレクトリは変えられますが、その場合は自分で mkdir しましょう。]]>
      <![CDATA[viewには以下のように記述。

<pre><code class="html">
  <% c = prepare_captcha :type => :image -%>
  <%= captcha_hidden_field c, 'my_super_model' %>
  <%= captcha_image_tag c %>
  <%= captcha_label 'my_super_model', 'Type in the text from the image above' %>
  <%= captcha_text_field 'my_super_model' %>
</code></pre>


モデルで認証する場合は、以下のように記述。
コントローラーで認証する場合は、記述の必要なし。

<pre><code class="ruby">
  class MySuperModel < ActiveRecord::Base
    validates_captcha
  end
</code></pre>


コントローラーで認証する場合は、以下のように記述。
captcha_valid? メソッドを使う。

<pre><code class="ruby">
  def save
    supermodel = MySuperModel.find(params[:id])
    supermodel.attributes = params[:my_super_model]

    if captcha_valid?(params[:my_super_model][:captcha_id], params[:my_super_model][:captcha_validation])
      supermodel.save
    else
      flash[:error] = "Are you sure you're human?"
      redirect_or_something
    end
  end
</code></pre>

質問で認証するなんて事もできるようなので、READMEを読んでみましょう。]]>
   </content>
</entry>

</feed>
