require ’oauth’でLoadError

Rails3でOauthアプリを作ろうとして
前にもはまったところで再度はまる。

require 'oauth'時に下記のエラーが発生。

LoadError (cannot load such file -- oauth)


gem listしても見えてるしなぁ・・・。

な環境でやっていますが、oauthが対応できてないっぽい。今も?
※こちら参照させていただきました
TwitterのbotをOAuthに対応させる - しばそんノート



ので、oauth-pluginを導入することに
GitHub - pelle/oauth-plugin: Rails plugin for OAuth

ちなみにoauthのgem[0.4.4]も必要なので、未導入なら入れておく。

sudo gem install oauth


rails3にpluginインストールする場合はGemfileに下記行を追加。

gem "oauth-plugin", ">= 0.4.0.pre1"

のちに、

bundle install

これで問題なく起動。

SQLiteのrpm消しちゃった

掲題の通り。
さくらの仮想サーバでお遊び中のこと。


Rubyでgem install sqlite3がこけるので
develも含めrpmは入ってるはずだから
ソースからインストールしなおすことに。

入れる時はcheckinstall使ってrpm化してから突っ込もうと思い
先にrpm -e sqlite3をやってみたところ、
yumrpmも使えなくなりてんやわんや。


確かにyum removeでえらくいろいろ消え去ろうとしてたな・・。
共有ライブラリのlibsqlite3.so.0が見えないのが原因。
>>libsqlite3.so.0 cannot open shared object file no such file or directory

ということで別のwindowsマシンからrpm解凍して
sqlite3.so.0を渡してあげることにした。

解凍にはフリーウェアのArchiveXを使用。
秘密鍵の関係でサーバに直接おくまでがめんどかったので
DropBoxの共有リンク使ってサーバ側からwget

/var/lib64の中にコピーして元通り。
(/var/libじゃだめでした。64bitだったのか)
再インストールが一瞬よぎった。マジ勘弁・・・・。

プロジェクト振り返りとDI/AOPの利点

長かったプロジェクトもようやく安定稼動に近づきつつある。
おめでとうございます。

改めて今回のフレームワークについて考え直してみると
作ってるときには気づきにくかった(うまく隠蔽されてた)利点が
ちょいちょいあったのでちょろっと書いておきます。

結構な大規模プロジェクトであったものの、特筆するほど変わった点はないですが。


プロジェクトの特徴

  • 大規模
  • BtoB
  • 若手が多く、スキルにはばらつきあり
  • オンラインメイン(じゃないとこもあるけど)

フレームワーク

良かったこと


テストは、DIでstubとimplがソース修正なし(設定ファイルのみ)で可能なためStubの切り替えが楽。
JSF使ってるのもありPOJOとしてJUnitでの単体テストがやりやすかった
あとJUnitをラップしたテスト用のフレームワークがあったのもやや意味ありか。


担当範囲ごとの進めやすさは、これもやっぱりstub。
interface使って実体を意識させない疎結合になっているので
「〇〇ができてないから、こっちのテストが・・」とかはなかった。
共通モジュールも結構あり、大規模分業制にならざるを得なかったのでこれは必要。


ログはアプリチームで噛むことは少なかったけど、プロセス実行ログとかまさにAOP
あとトランザクション制御は完全にミドル以下制御だったので
もしこれがなく各実装者依存だったら結合テスト以降どっかで死んでいたでしょう。


改善できたこと
プロジェクトの性質上、プログラム仕様がガチガチに決まっている(というか現行どおり)ので
再利用できたモジュールとか、クラスの責任範囲なんかはごちゃごちゃ。
トランザクションスクリプトには当たるのだろうけど同じような事を結構ごちゃごちゃしてる気がするなぁ。

ロギングはメッセージミドルとspringの住み分けが微妙なところに。
デバッグ用にログ出そうと思っても、切り替えが結構めんどくさい。。。

stubを使ったテストは、そのstubのただしさをどこかで保証しないと。
stub作るのも呼び出し側だったからオレオレテストになりがち。


振り返り、大事ですね。まだまだ勉強が足りん。

railsインストールまでのハマリどころ

備忘録として。

(1) install時にzlibとopensslの拡張を入れておいた方が良い。
たぶん後々必要で再コンパイルすることになります。

(2) 無理してRPM化しようとしない。
checkInstall使ってRPM化しようとしたけど、zlibがうまく入らなかった。
というよりも一旦RUbyのインストール後に拡張が必要なため。

(3)sqliteが必要
必ず、というわけではないかもしれないけど
デフォルトはsqliteが必要だし、何かと文句言われたような気がする。

番外:
ソースインストールするときにビルドでこける場合、
大抵必要なヘッダファイルがない。
rpmならXXX-develのものを入れてやればうまく行くことが多い。

magicMouseの接続がぶつぶつ切れる

MagicMouseの接続が、やたらと切れる。
この前に初めての電池交換をしたところなので、
その辺りが怪しいとにらんでみたら、やはり。

裏面のふたの締まりが悪かったよう。
接触の問題か、半開きになってはBlueTooth
無効化されていたようだ。

ふたを止める黒い部分が正しい位置まで戻っていなかった。
特にカチッと音がする訳ではないが、しっかり戻しきると順調。


ついでなのでMagicMouseの使用感も書いてみると、
非常に感度もよく使いやすい。
以前はLogiCoolのワイヤレスを使用していたが、
それと比較すると精度高く動いてくれている。
(特に木目調デスクでマウスパッドがない状態での差は大きい)

加えて、タッチ操作も非常に快適。
横スクロールなどは直感的にもしっくりきているので満足。
これが無料とは、なかなかありがたいもの。


ユーティリティソフトととしてMagicPrefを入れている。
これによりタッチ操作に特定動作を割り当てることができる。


3本指クリックでExpose、3本指タップでDeskTop表示を設定している。
3本指タップは少し難しいが、Imacになってからディスプレイが大きいので
画面端まで行く手間が省けるのがうれしい。

他にもズームインや、カスタムアクションでコマンド実行など
ができそう。いじってみよう。

ストアドプロシジャの引数からプロシジャ名を指定して実行

mysqlのプロシジャを使用しているが、引数でプロシジャ名を指定することで
汎用的にプロシジャを呼び出すユーティリティのようなものが欲しかったので。


例えばDB上のあるテーブルから日付を取得し、
取得した全日付に対してプロシジャを呼び出す場合、
プロシジャごとに日付取得実行処理を書くのが面倒。


できれば日付全取得と、そこから計算するロジックは切り離しておきたい。
ということでやってみました。

drop Procedure TEST;
DELIMITER //                                       

CREATE PROCEDURE TEST(IN name varchar(30))

BEGIN
    set @PRNAME = name;
    set @query = concat('CALL ',name, '(');
    set @query = concat(@query,')');
 
    select @query;
    PREPARE stmt  FROM @query;  
    EXECUTE stmt;
END
//
DELIMITER ;


drop Procedure TEST2;
DELIMITER //                                       

CREATE PROCEDURE TEST2()
BEGIN
  show databases;
END
//
DELIMITER ;

実行時はこんな感じ。

mysql> call test('test2("procedure")')    -> ;+-----------+
NAME
                        • +
procedure
                        • +
1 row in set (0.00 sec) Query OK, 0 rows affected (0.00 sec)