画像掲示板とブログを足して2で割ったようなWEBサービスのβ運用を開始
Railsでチョコチョコ作っていたWEBサービスのβ運用を開始してみます。
「展示会2.0」というなんの工夫もない名前ですが、絵師さんのために特化したブログ、といった感じのサービスです。
1つの投稿に1枚の絵が対応していて、その絵は絵師さんのブログで表示されるのはもちろん、システムのトップページにもサムネイルで表示されます。
そしてサムネイルは様々な条件で検索されることができます。これによって、「ある特定の絵を見たい人」と「絵師さんが描くある絵」のN対Nを結び付けられたらいいなぁと思います。
具体的に言うと、例えば「リリカルなのは」の「フェイト」の絵が見たい、と思っている人がそのような条件で検索し、RSSなどで継続チェックしているとき、ある絵師さんがフェイトの絵を描くと、検索者にダイレクトに絵を提示することができます。
また、評価とコメント機能を全ての絵で統一することで、絵を見る人がフィードバックを送りやすいようにしました。自分の描いた絵の反応を知りたい絵師さんは多いと思うので、そこらへんの助けになれば良いなぁと思います。
そんなこんなで、絵を描かれている方は是非登録していただけるとうれしいです。
DreamhostでRailsを使ってみる
巷で話題のDreamhost。初年度が実質22$(三千円くらい)で200GBのディスク容量に月の転送量が2TBと、桁まちがってんの?というスペックですが、Railsも動くようなので借りてみました。
sshでログインして、scpでRailsのプロジェクトをコピー。自分のユーザーパスのドメイン名のディレクトリにapacheのヴァーチャルドメインのパスが通っているようなので、
でパスを通せばすぐさま動かせます。
fastcgiも、public/.htacessの
RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
を
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
に変えるだけで動きます。
ちなみに、現時点(2月5日)の時点でRailsのバージョンは1.2.1、Rubyは1.8.5と最新でしたが、
ImageMagickがちょっと古く、6.2.4でした。resize_to_fit()をRMagickから実行したら「そんなメソッド知らねーよ」と怒られてしまいました。
それ以外では今のところ不満はないですね。
海外とのssh通信も、とくに遅くは感じないと思います。
アクションを直リン禁止にする
DBから画像データをsend_dataするような、ビューから呼び出すからpublicにしなきゃらなんけど、
外から直リンさせたくない、ような関数ってどうやって指定するのかなぁと探したんですが、
見当たらなかったので実装してみました。
def tyokurin_notallowdalbe
ref = @request.env["HTTP_REFERER"]
unless ref.to_s =~ /#{@request.host.to_s}/
flash[:notice] = "直リンできません。"
redirect_to :action=>"index"
return;
end
end
そんで
before_filter :tyokurin_notallowdalbe, :only=>:draw
してやれば、オッケーのようです。
-
-
- 2月5日追記---
-
同じようなことはActionPackに最初っからついてるhide_actionでもできるようです。
publicインスタンスメソッドをアクションとして認識しないようにするものですが、
コイツだとビューから@pict.drawのように呼び出せても、:action=>:drawのように
間接的に呼び出すのはできないっぽいです。
ExceptionLoggerプラグインを使ってみた
ExceptionLoggerという、運用中に発生した例外をDBに保存しておき、後でAjax画面で管理できるプラグインを使ってみました。
http://blog.masuidrive.jp/articles/2006/09/25/rails-rss-feeds-for-exception-logger
を参考にインストールします。
ruby script/plugin install http://svn.techno-weenie.net/projects/plugins/exception_logger
してから、
でテーブルを作成。
僕の環境はRails1.6.1のRuby1.8.4なんですが、このままじゃエラーになって動きませんでした。
エラーをキャッチする部分でエラーが発生するもんで捕捉がめんどうでしたが、どうも
plugin/exception_logger/lib/exception_loggable.rb
の
render_optional_error_file status
が悪さをしているようで、こいつをコメントアウトしたら動きました。
そして/logged_exceptionsにアクセスすると管理画面にいけるわけですが、どうもこの管理画面は
productionモードでないとまともに動かないようです。developmentモードだと、挙動が不安定になって
意味不明でした。
なにはともあれ、自分の見てないところで発生する例外を全部チェックできるのはうれしいですなぁ。
-------2月18日追記-----------------------
デフォルトのまんまだと、アドレス打ち込むだけで誰でも管理画面に行けてしまいます。
READMEを見ると認証を使った方法が書かれていますが、login_engineを使っているならもっと
簡単にできると思います。
exception_logger/lib/logged_exceptions_controller.rb
で定義されてる全てのアクションに対し、認証フィルタをかけてやります。
class LoggedExceptionsController < ActionController::Base cattr_accessor :application_name layout nil before_filter :nin def nin #ユーザー認証 user = session[:user] if !user redirect_to '/404.html' return false end unless user.login=="root" redirect_to '/404.html' return false end end
login_engineの認証メールを日本語化(JIS化)する
2月5日追記---------------------------------------
SJISじゃなくJISでした。
基本的なこと間違えてすんません ι(´Д`υ)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
login_engineの認証メールはUTF-8で送信されます。
でも、日本語で送ると、受け取ったとき文字化けしてしまいます。
大抵のメーラーはJISで読み込もうとするので。
だもんで、認証メールをJIS化する必要があるのですが、
ActiveHeartを使用すると簡単にできます。インストールしたら、
/XXXX/vendor/plugins/login_engine/app/models/user_notify.rb
の
class UserNotify < ActionMailer::Base
を
class UserNotify < Iso2022jpMailer
に書き換えます。
これで本文はJISで送れるようになったのですが、タイトルと送信者がJIS化
されていません。ですので、適当にJIS変換関数を定義して、
def jis(text)
text = NKF.nkf('-j -m0', text)
text= [text].pack('m').delete("\r\n")
"=?iso-2022-jp?B?#{text}?="
end
内容を書き換えてやればオッケーのようです。
@from = jis @from
@subject = jis @subject
送信される内容は
/XXXX/vendor/plugins/login_engine/app/views/user_notify/
以下のrhtmlファイルに記載されていますので、これらを日本語に
書き換えます。