• 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

Rails2.1以降

2.1以降はview以外からhelpersにアクセスできるようになるようです。via 瀧内さん

   1  ApplicationController.helpers.simple_format(text)
http://www.nomedojogo.com/livro/carlosbrando-rubyonrails21_en.pdfより

Rails2.1以前

私の現状の環境では2.1でないので、ぐぐってみたらいい感じのがありました。
http://snippets.dzone.com/posts/show/1799

ApplicationControllerに挿入すればok

   1    def help
   2      Helper.instance
   3    end
   4  
   5    class Helper
   6      include Singleton
   7      include ActionView::Helpers::TextHelper
   8  
   9      def h(string)  
  10        ERB::Util.html_escape(string)
  11      end
  12    end
(注)オリジナルのsnippetにdef hを追加しています。

posted by Png satoko on Fri 25 Jul 2008 at 05:51 with 2 comments

(追記) スキーマのネームスペースが正しくありませんでした。修正しました。最新のネームスペースは適宜参照してください。

検索エンジンに正しくインデックスしてもらうのは大事です。今回モバイルのも同時に作ってみました。

sitemap.xmlの形式

下記Googleのウェブマスター向けヘルプセンターを参照。

routes.rbにサイトマップを登録

   1   map.m_sitemap 'mobile_sitemap.xml', :controller => "mobile", :action => "sitemap"
   2   map.sitemap 'sitemap.xml', :controller => "top", :action => "sitemap"

viewを作成

ファイルを作成します。:app/views/top/sitemap.xml.builder
(注) サイトマップのスキーマが0.9だと、Google,Yahoo, MSNなどのサーチエンジンが読めるようです。
(注) lastmodタグについてはDate.today.xmlschemaのようにxmlschemaが返す表示形式でOKです。

   1  # sitemap.xml
   2  xml.instruct! :xml, :version=> '1.0', :encoding => 'UTF-8'
   3  xml.urlset :xmlns => 'http://www.sitemaps.org/schemas/sitemap/0.9' do
   4    xml.url do
   5      xml.loc root_url
   6      xml.changefreq 'daily'
   7      xml.priority '0.9'
   8    end
   9  
  10    xml.url do
  11      xml.loc help_url
  12      xml.changefreq 'monthly'
  13      xml.priority '0.9'
  14    end
  15  end
ブラウザからアクセスして、サイトマップが表示されるか確認します。
モバイルサイトマップは下記。
(注) モバイルはまだ標準化されていない?ようで、googleのスキーマ 0.84を指定します。
(注) モバイル用のname spaceを設定する必要があります。
   1  # mobile_sitemap.xml
   2  xml.instruct! :xml, :version=> '1.0', :encoding => 'UTF-8'
   3  xml.urlset :xmlns => 'http://www.google.com/schemas/sitemap/0.84',
   4              "xmlns:mobile" => 'http://www.google.com/schemas/sitemap-mobile/1.0' do
   5    xml.url do
   6      xml.loc m_url
   7      xml.lastmod lastmodified.xmlschema
   8      xml.mobile :mobile
   9    end

サイトマップ登録

HTMLに下記を書いておくと、Google, Yahoo!, MSNもとっていってくれます。

   1  <link rel="alternate" type="application/rss+xml" title="your title" href="sitemap.xml" />
Googleウェブマスターツールでサイトマップを登録すると、サイトマップが正しくない時にエラー+アドバイスをくれるので便利でした。一度目はマスターツールで確認して、それ以降は上記のタグでやるのがよさそうですね。

Refs

http://brass.to/blog/sitemap_xml_by_rails2_0.html
http://www.google.com/webmasters/tools/
http://www.google.com/support/webmasters/bin/answer.py?answer=35738 googleのサイトマップのエラーと警告について
http://blog.livedoor.jp/botany/archives/50281545.html Google,Yahoo!,MicrosoftがSitemap protocol(サイトマッププロトコル)で合意に

posted by Png satoko on Thu 10 Jul 2008 at 15:26

今のコミット間違った―!というときに、コミット内容もなしにして戻すのがgit-reset --hard

git reset --hard HEAD~3
Rewind the master branch to get rid of those three commits.
http://www.kernel.org/pub/software/scm/git/docs/git-reset.html

一つ前のコミットまで戻る時は、HEAD^を引数に渡すと戻ってくれます。 あーよかった!

posted by Png satoko on Wed 9 Jul 2008 at 15:35

以前、Repoが壊れたというのでjs2-modeが原因みたいなことを書いたのですが間違っていたみたいで、今朝また壊れました...js2-modeの中の人ごめんなさい。

また原因がわかったら記事を書こうと思います。 以前の記事は非公開にしましたのでご了承ください。

posted by Png satoko on Thu 3 Jul 2008 at 10:22

環境

クライアント:携帯
サーバ

  • apache
  • mongrel
  • mongrel_cluster
  • rails

+actionキャッシュを使用している。

   1  class BlobsController < ApplicationController
   2    layout nil
   3    caches_action :show
   4    session :off, :only => :show

状況

cacheがないページにアクセスすると、正しく表示される。どうやらcacheを返したときに、(携帯で)うまく表示できない様子。
PCではcacheがあっても、なくても正しく表示される:firefox。PCのブラウザは賢い。

ログを確認:cacheがあるのでhaltedしたというメッセージ

これはcacheがあるので、ActionCacheFilterを中止して、cacheを返す時のメッセージ。なのでエラーではない。

   1  Processing BlobsController#show (for 219.125.148.54 at 2008-07-02 10:49:02) [GET]
   2    Parameters: {"digest"=>"d8de32d0ad4bcf08016c6cedd31d426b", "action"=>"show", "controller"=>"blobs", "formats"=>[]}
   3  Filter chain halted as [#<ActionController::Caching::Actions::ActionCacheFilter:0xb72d10c4 @actions=#<Set: {:show}>, @options={}>] rendered_or_redirected.
   4  Filter chain halted as [#<ActionController::Filters::ClassMethods::ProcWithCallFilter:0xb72d0de0 @filter=#<Proc:0xb751d184@/usr/local/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/filters.rb:657>>] did_not_yield.
   5  Completed in 0.00035 (2833 reqs/sec) | DB: 0.00000 (0%) | 200 OK [http://mmmuji.s21g.com/blobs/d8de32d0ad4bcf08016c6cedd31d426b]

詳しく状況を確認:Content-Typeが正しくない

サーバ、クライアントの両方のキャッシュを削除して、サイドブラウザからアクセス、画像を表示してfirefubのNetタブで確認すると、Content-Type: jpg; charset=utf8となっている。
瀧内さんからもらったアドバイス:caches_actionはヘッダーをキャッシュしないmongrelはヘッダーについてKY(空気読まない)
mongrel_jpg_cache.png

Content-Typeを設定するいくつかの方法

  1. mongrelで設定
  2. plugin(cache_fuなど)を使う
  3. railsで設定:config/initializers/mime_types.rb
  4. 表示時に設定(これはaction_cachesはヘッダーをキャッシュしないので、キャッシュ表示時には意味がない)

結論:正しいContent-Typeは(特に携帯には)大事

上記の方法以外にも、mongrelをやめるという選択肢もあるのですが、とりあえず、railsでヘッダを設定するのはmongrelをやめても邪魔にならない設定であるのでそれをやってみました。
mongrel_jpg_cache_with_mime_type.png
正しくContent-Typeが設定され、携帯からでもちゃんと表示されました!

後mime_types.rbでimage/jpgなどと致命的ミスをしてハマったというのもありました。

Refs

http://rubyforge.org/pipermail/mongrel-users/2006-May/000237.html
http://www.igvita.com/2007/06/13/caching-and-mime-types-in-rails/:cache_fuでのmime_typeキャッシュ

posted by Png satoko on Wed 2 Jul 2008 at 17:02