Web 酒 肴
[RoR]Ruby on Railsチュートリアル #1
- 2008-02-19 (Tue)
- Ruby On Rails ( チュートリアル )
久しぶりにRailsでちょっとしたアプリを作ろうとしたら、かなり色々忘れてて大変だった。 今度忘れた時のためにちょっとまとめとこう。
環境
さくらインターネットでRailsアプリを新たに作成した際、以下の作業を忘れてはいけない。
public/.htaccessの修正
# 以下の3行をコメントアウト(先頭に#を付ける)します
AddHandler fastcgi-script .fcgi
AddHandler cgi-script .cgi
Options +FollowSymLinks +ExecCGI
config/environment.rbの修正
以下の2行を追加してください
$LOAD_PATH.push("$HOME/ruby/lib/ruby/site_ruby/1.8")
$LOAD_PATH.push("$HOME/ruby/lib/ruby")
apacheから見えるように設定
cd $HOME/www
ln -s $HOME/work/hoge/public {$APP}
以上、参照元:Ruby on Rails を入れる(さくらインターネット)
routes.rbの修正
これは必須ではないが、URLを単純化するために。 設定内容は以下のサイトが詳しい。
優しいRailsの育て方 - ノk|*‘-‘)<ノリマツ!愛だよ、愛!
controller系
他のアクションと同じ画面遷移をさせる
render :action => "他のアクション名"
リファラの参照
request.referer
その他のrequestオブジェクトの中身はこちらの記事参照。つーか、ここめっちゃ見やすい。このエントリーもぶっちゃけこのサイトの真似だったりする。
その他Rubyの基本
クラスの初期化はinitializeコンストラクタで
つーか、そこまで忘れてどうする。インスタンス変数を作成するのに四苦八苦。
[RoR]routes.rbの更新が反映されない
- 2008-02-15 (Fri)
- Ruby On Rails
さくらインターネットのレンタルサーバでRuby on Railsを動かしている。 ふとデフォルトのwelcome画面をそのままにしていたことに気付き、config/routes.rbを修正。 これでTOPページのURLが単純化された、、、はず。
ところがroutes.rbの変更をどうやって反映したらいいのかわからない。共用のレンタルサーバだからApacheの再起動とかもできないし。
色々と調べていくうちにrakeタスクの中で設定を更新するようなものもあった。しかしconfig/boot.rbとかそんなんばっか。肝心のroutes.rbを更新するタスクは見つからなかった。
悩んだ挙句、welcomeページに表示されているpublic/index.htmlを削除したらうまくいくことに気付いた。う~ん、なんか釈然としない。だけどindex.htmlを削除するってのはよく考えたら基本だな。以前翻訳した記事でもそう書いてた(って何のために翻訳したんだか。)
[MODx]Dittoでドキュメントとウェブリンクを同様に扱うには?
MODxを使用して以下のようなことをしたいと思っていました。
前提条件
- MODx0.9.6
- サイトには随時、記事が追加される
- サイトは外部のブログへのリンク集も持ち、そのリンクも随時追加される
- MODx上で記事はドキュメント、リンクはウェブリンクで保持している
やりたいこと
- 新着記事、リンクをDittoを使って表示する
- 記事もリンクも時系列でソートされ、どちらもごちゃまぜで表示する
- 記事の場合は内容([+content+])の一部、リンクの場合はリンクの説明文([+description+])を表示する
例えば以下のようなファイル構成です(カッコ内はそのオブジェクトが持つID)。
記事用フォルダ(1)
└記事A
└記事B
└記事C
ウェブリンク用フォルダ(2)
└リンクA
└リンクB
└リンクC
このようなファイル構成から記事とウェブリンクをごちゃ混ぜにして公開日が最新の3件を取得するには、Dittoスニペットを以下のように使用します。表示に使用するチャンク名はchunkとします。
[[Ditto?parents=`1,2` &sortBy=`pub_date` &total=`3` &sortDir=`DESC` &tpl=`chunk` &hideFolders=`1`]]
それぞれの設定内容は以下の意味です。
| 設定内容 | 意味 |
|---|---|
| parents=`1,2` | 記事用フォルダとウェブリンク用フォルダ両方から取得する |
| sortBy=`pub_date` | 公開日でソートする |
| total=`3` | 3件取得する |
| sortDir=`DESC` | 降順でソート(新しいものが上にくる) |
| tpl=`chunk` | 使用するチャンク名 |
| hideFolders=`1` | 親フォルダを表示対象にしない |
そしてチャンクを以下のようにし、PHxファンクションを使用してドキュメントかウェブリンクかで表示内容を変えます。プレースホルダ[+type+]がドキュメントの場合はdocument、ウェブリンクの場合はreferenceとなるのでそれをもとに条件式で判定します。
注意
以下の例はうまく動作しません。
[+phx:if=`[+type+]`:is=`reference`:then=`[+description+]`:else=`[+content:limit=`500`+]`+]
これでドキュメントのときは内容([+content+])の最初の500文字を、ウェブリンクの場合は説明文([+description+])を表示できる・・・と思ってたらできませんでした。色々試行錯誤しているうちに、どうやら[+type+]の中にオブジェクトのタイプがちゃんと取れるときと取れないときがあることがわかりました。
結局、[+type+]を別の場所で一度使用してやるとPHxファンクションの中でも使用できるようになることを発見。以下のようにHTMLのコメント部で一度表示するとうまくいきます。なぜかはわかりませんが。
一応の解決策
<!-- this is [+type+] -->
[+phx:if=`[+type+]`:is=`reference`:then=`[+description+]`:else=`[+content:limit=`500`+]`+]
Dittoのソースとか追っかければ理由はわかるかもしれないけど、今までPHPはほとんどノータッチだったので、とりあえず動いたということでよしとします。
[Nucleus]スパムコメントに対応 - NP_Captchaプラグイン
以下から入手して、ここ数日急きょ増えたスパムコメントに対応。 コメント時に画像内の文字を入力するという、よくあるやつ。
それはそうとコメントフォームの表示が崩れるんだけど、修正する方法がわからない。 スキンやテンプレートで定義されているのでもないみたい。 どっかでカスタマイズできるのかな。
追記
CSSの修正でなおることがわかった。どうやらNucleus3.3独自の問題なのかな?
以下参照。
[勝手に日本語訳] Getting Started With Ruby and Rails
- 2008-02-10 (Sun)
- 翻訳 , NetBeans , Ruby On Rails
以下の記事の日本語訳が無いようなので、勝手に翻訳してみた。
それが許されるのかどうかはこれから問い合わせて、問題があるなら削除します。 日本語訳もだいぶ適当だし。伝わりやすい意味を重視したつもりですので、正確な訳にはなっていない場所も多々あると思います。意味としてもおかしい部分があれば、ぜひご指摘ください。
元記事は以下。
Getting Started With Ruby and Rails
このチュートリアルはあなたが即座にNetBeans IDEでRubyやRuby on Railsのアプリケーションを開発できるようにしてくれるでしょう。このチュートリアルはアプリケーション開発におけるいくつかのよくあるケースにおいて、あなたがどのようにIDEのRubyサポートを使用するかを教えてくれます。
このチュートリアルは順番どおり進める必要がありません。必要なところだけを素早く拾い読みし、時間があれば各セクションを見直すという読み方で構いません。順番どおり進める形式のチュートリアルがよければ、まずRubyでBlogを10分で作るを参照するのがよいでしょう。
目次
[Nucleus][MODx]google-code-prettifyでソースコードの色分け表示
以下参照
google-code-prettify で ソースコード表示 を修飾
最近、Nucleusのカスタマイズに関してここのブログに大変お世話になっています。
僕も誰かの役に立てるような情報を残せるように、早くなりなさい。
google-code-prettify導入後、色合いが背景と会わなかったのでスタイルシートの背景色を若干修正。
よし、これでOK。
これを参考にMODxのサイトにも導入してみた。
prettify.css と prettify.jsは(MODxインストールディレクトリ)/assets/jsと(MODxインストールディレクトリ)/assets/cssに設置。cssディレクトリは無かったので新たに作りました。ようは見えるところにあればどこでもいい。
個別のドキュメントに一つずつ修正を加えるのはもちろんナンセンスなので、共通のテンプレートの<head>内に以下のコードを追加します。prettify.cssとprettify.jsへのリンクは各自の環境にあわせましょう。
<!-- google-code-prettify -->
<link href="/assets/css/prettify.css" rel="stylesheet" type="text/css"/>
<script src="/assets/js/prettify.js" type="text/javascript"></script>
<script type="text/javascript">
function prettyPrepare() {
var o = document.getElementsByTagName("pre");
for (var i=0; i<o.length; i++) {
if (o[i].firstChild.tagName.toLowerCase() == "code") o[i].firstChild.className = "prettyprint";
}
}
</script>
そしてbodyタグを修正。
<body onload="prettyPrepare();prettyPrint();">
以上。 最近、人のふんどしで相撲取りすぎだな。。
追記
IEでの利用に不具合が発覚しました。 詳しくは次の記事を参照してください。 今のところ解決法は見つかっておらず、IEのみオフになるようにしています。
[Nucleus]カテゴリの階層化
NP_MultipleCategoriesで実現できます。
ただしスキン編集とかスキンファイルをいじったりする必要がある。
Nucleusはデザインに関する設定内容が色んな場所に散らばってる。
これはスキンとテンプレートという思想上しかたのないことかもしれないけど、若干不便に感じるんだなぁ。
そういえばMODxもこれに似ているところがある。
でもMODxは普通のHTMLに近いので知ってる人にはわかりやすい気がする。
Nuleusのスキンとテンプレートの概念って、本当にちゃんと理解するのって大変そう。。