ウェブサービスを作っています。

2009-01-01から1年間の記事一覧

LDR にはてなスターを表示

こちらをほとんどそのまま利用させていただいています。 最速インターフェース研究会 :: livedoor ReaderにはてなスターをくっつけるGreasemonkeyスクリプト Shift + H を押さなくても表示するようにしました。 // ==UserScript== // @name LDR with HatenaS…

JIT コンパイルを無効にする

google-appengine gem (v0.0.6) を使って GAE + JRuby アプリを作っていると、JIT コンパイルのせいでよくわからないエラーになることがあります。 そういうときに JIT コンパイルを無効にする方法です。 config.ru に追記するだけ。 AppEngine::Rack.app.sy…

メモリリークを起こすジョブを DelayedJob で実行する

1 ジョブごとに worker を終了させて god で再度起動させる、あまり良くない方法です。 ジョブ。グローバル変数 $exit を true にすると、job から worker を終了させられます。 class HogeJob def perform .. (leaking process) .. $exit = true end end de…

Exception Notifier コンポーネント更新

301.textile CakePHP のアプリで、エラーが発生したときにメールで知らせるコンポーネントです。 関連: Exception Notifier コンポーネントを公開 - milk1000cc 今回から FatalError も捕捉できるようになりました。 あまりきちんとテストしていなくて適当な…

iTerm で Command キーを Meta キーの意味にするパッチ (SnowLeopard, iTerm 0.10)

元記事はこちら。 iTermでCommandキーをMetaキーの意味にするパッチ — ディノオープンラボラトリ 今回は、SnowLeopard で iTerm 0.10 をビルドしてみます。 パッチは gist においておきます。元記事では Command + v を無効にしていますが、このパッチでは有…

iPhone の iPod でスマートプレイリストがソートされないとき

iTunes でそのスマートプレイリストのライブアップデートをオフにします。 参考: 価格.com - 『スマートプレイリストの曲順』 APPLE iPhone 3GS 32GB SoftBank のクチコミ掲示板

Rails on GAE における config.ru サンプル

gae

google-appengine gem を使用したときで、/admin 以下は認証掛けたいみたいなときの config.ru サンプル。 require 'appengine-rack' AppEngine::Rack.configure_app :application => 'my-app' ENV['RAILS_ENV'] = 'appengine' require 'config/environment'…

DEBUG 値が 0 でも、DB スキーマキャッシュが行われないようにする

CakePHP で本番運用する際は、DEBUG 値を 0 にするのがふつうだと思いますが、この場合、デフォルトで DB スキーマのキャッシュファイルが生成されます。 このため DB スキーマを変更した際は DEBUG 値を 1 以上にするか、app/tmp/cache/models 以下のファイ…

paginator パラメータのコロン区切りをやめる

CakePHP のページネーション機能を使うと、/hoge/fuga/page:2 のようなコロン区切りパラメータのリンクになってしまいます。 これは気持ち悪いので、何とか /hoge/fuga?page=2 にする方法を考えました。 やはり気になっている方はいるようです。 ページが見…

さくらの共有サーバに git リポジトリを置いていて git clone するときに command not found: git-upload-pack と出る場合の対処

.zshenv に git のパスを追加する。以下、$HOME/local/bin に git があるときの例 PATH=$HOME/local/bin:$PATH

Ruby で Task Queue

GAE SDK (Java) 1.2.5 から、Task Queue がサポートされて、appengine-apis (0.0.9) にも早速実装されているようなので試してみました。 taskqueue という適当なタスク追加アプリケーションを sinatra で作ってみます。 ローカルでのみ確認しています。 $ mk…

URI Encode と Punycode の共存

http://日本語.jp/カ/ひ?a=漢みたいな URL を Ruby で http://xn--wgv71a119e.jp/%E3%82%AB/%E3%81%B2?a=%E6%BC%A2に変換する必要があったので、適当にでっち上げました。 弾さんの記事に感謝。あと、punycode4r っていう gem のおかげです。 とりあえず enc…

Delayed Job で、can't dump anonymous class Class というエラーが発生する

Delayed Job とは何か BackgrounDRb 的な何かです。詳しくはググれば、英語のチュートリアル的なものがいろいろ見つけられると思います。 コンストラクタで複雑なことをしているとエラーになる class CrawlJob def initialize @agent = WWW::Mechanize.new e…

OpenVZ で /dev/null: Permission denied と表示されるときの対策

rm -f /dev/null mknod -m 666 /dev/null c 1 3 サーバ再起動するとまたおかしくなるようなので、/etc/rc.local 冒頭などに書いておけば良いと思います。 参考: OpenVZ で Permission denied - ふりだしに戻る

GAE で Rails アプリが作りやすくなっています

追記(2009/11/29 19:26): Google App Engine 0.0.5 gem では、この記事通り動かすことができなくなっていますのでご注意ください。 google-appengine という gem のおかげで、簡単になっています。XML 書かなくて済みます。 Rails Primer for Google App Eng…

GoDaddy のネームサーバを一気に書き換える

大量にドメインを持っていて大量にネームサーバを書き換えたいのに GoDaddy は js オフだとうまく動かないので、WWW::Mechanize 使うのも難しい。 しかしこんな作業を人力でやるのもどうかと思っていたので、Chickenfoot という Firefox を自動操作するアド…

appengine-apis の memcache.rb を読み込むと Datastore に格納する日本語が文字化けする

appengine-apis のバージョンは 0.0.6 です。 正確には、memcache.rb が内部で読み込んでいる datastore_types.rb のせいです。 Bumble や DataMapper を使っても文字化けしました。 Java は詳しくないのでよくわかりませんが、String#to_java_string が Lat…

Warbler で簡単 Sinatra アプリ on GAE

JRuby と AppEngine SDK (Java) はインストールされているものとします。 JRuby は、mac なら macports などで導入できます。 SDK はインストールとか不要で、ダウンロードして解凍するだけで使えるので、はじめの一歩を踏み出しましょう。 Downloads - Goog…

railswhere が Rails 2.3.3 で動かない件

komagata さんの記事で知って以来、便利に使わせていただいている railswhere というプラグインがあるのですが (timcharper さんの笑顔が素敵)、Rails 2.3.3 にしたら動かなくなってしまいました。 where.and("name LIKE ?", "%#{ name }%") みたいな部分で …

script/generate bumble_model が失敗する

第16回 Google App Engine上でRailsを動かす:Ruby Freaks Lounge|gihyo.jp … 技術評論社 これの通りやってて、 $ script/generate bumble_model Post name owner_id created_at をやろうとしたら /path/to/jruby/lib/ruby/site_ruby/1.8/builtin/javasuppo…

ActsAsDigestedOn プラグインをリリース

近年 255 バイトを超える URL が増加しており、これらをデータベースに格納するため URL のフィールドを TEXT 型にすることがあります。 参考: URLを扱うテーブルを作るときにどうすべきか - 金利0無利息キャッシング – キャッシングできます - subtech しか…

ログにタイムスタンプを追加する

Rails というか ActiveSupport を使っていると、Logger#add などでタイムスタンプが追加されなくなります。 require 'logger' Logger.new(STDOUT).info 'hello' # I, [2009-06-24T11:47:29.977960 #4036] INFO -- : hello require 'rubygems' require 'activ…

unix のグループを理解する

グループとか考えてこなかったので反省してちゃんとします。 グループ追加 $ sudo groupadd web ユーザの所属グループ変更 $ sudo usermod -G wheel,web milk1000cc ユーザの所属グループ確認 $ groups milk1000cc 共用フォルダ $ mkdir /home/web $ chmod g…

ランダムな英数文字列の生成

require 'openssl' [OpenSSL::Random.random_bytes(8)].pack('m').gsub(%r![+/=]!) { rand(10) }.strip

Authlogic を使ったときの RSpec ヘルパー

以下を参考に Clearance 風 (?) に書けるようにしました。 AuthLogic is awesome! - Adventures with Ruby authlogic_helper.rb などとして require すれば、以下のように書けます。 describe HogesController do public_context do describe 'GET index' do…

WebService::Simple の Ruby 版を作りました

ゆーすけべーさんが Perl で作られた WebService::Simple の Ruby 版を作りました。 milk1000cc/web_service_simple · GitHub オリジナルは、こちら。 POX over HTTP のウェブAPIにアクセスするためのモジュール「WebService::Simple」を作ってみた - ゆーす…

トラックバック先の AutoDiscovery

RDF に基づいて、渡されたパーマリンクに対するトラックバック Ping URL を自動検出します。 参考: トラックバック技術仕様書 トラックバック関連の gem ってないんですかね。 Timeout::Error も捕捉しています。 require 'net/http' require 'uri' Net::HTT…

nginx (Passenger nginx version) で BASIC 認証

htpasswd は、Apache のやつで作ります。 $ sudo htpasswd -c /opt/nginx/conf/htpasswd admin あとは、/opt/nginx/conf/nginx.conf の server ブロックを以下のような感じで設定します。 ... http { ... server { listen 80; server_name www.example.com; …

nginx の再起動

Passenger で passenger-install-nginx-module して、/opt/nginx 以下にインストールした前提です。 $ sudo pkill nginx $ sudo /opt/nginx/sbin/nginx nginx 設定ファイル正当性確認は $ /opt/nginx/sbin/nginx -t

Ubuntu に sqlite3-ruby gem を入れる

sudo aptitude install libsqlite3-dev sudo gem install sqlite3-ruby