サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
パリ五輪
n8.hatenablog.com
ActiveRecordなどORMを使用していると、うっかり大量のSQLを発行してしまうことがある。Bulletを使えばN+1のクエリは検知出来るが、そうでないクエリでも肥大化するケースはある。 例えば、集計するような処理を複数のモデルからメソッドを寄せ集めて書いていると、いつの間にか実行されるSQLが膨れ上がっていたということがあった。 もちろん実装の問題なので、そのときは実装方法を考え直して解消したが、そもそも開発している段階では、ログに張り付いていないと気付きにくいという問題がある。 ブラウザでロードした際に実行される処理であれば、rack-mini-profilerやChrome拡張のRails PanelからSQLの数と内容を確認できるが、APIやバックグラウンド処理の場合は難しい。 もっとカジュアルに確認できないものかと調べていたら、ActiveSupport::Notific
バージョン Sidekiq 3.3.0 基本動作 ジョブが走っている状態でSidekiqを終了すると、8秒間(デフォルト)待って終了する。そして、8秒以内に終了しなかったジョブはキューに戻される。 メール送信くらいの軽いジョブであればで問題にはならないが、例えば、AWSのAPI叩いてRDSのインスタンスを作って完了まで待つジョブなんて走らせると平気で20分以上かかってしまう。しかもキューに戻されると再起動後にもう一台インスタンスが作成されてしまうのでかなり問題だ。 では安全に再起動するにはどうすればいいのか Sidekiqのプロセスに対してまずはSIGUSR1を送り、その後にSIGTERMを送ればいい。 SidekiqはUSR1を受け取ると、実行中のジョブはそのまま継続し、新規ジョブの実行を停止する。(キューは引き続き溜まる) 実行中のジョブが0になったタイミングでTERMを送って終了し、
Markdownには様々な方言があり、記法の解釈にも微妙に差があったりする。 一つの言語で開発しているのであれば、同じライブラリを使えば問題にならないが、それぞれ別の言語で書いた複数のアプリケーションで全く同じレンダリング結果を得るのは難しい。 一番ベーシックな記法だけに絞れば差分を減らすことは可能だが、 Fenced code block や Table 記法はあるとないとでは大分使い勝手が変わるので出来れば使いたい。 と、実際に困ることがあったので、どの言語で開発しても統一した記法が使えるよう、Markdownをレンダリングするサーバを書いた。 https://github.com/nkwhr/qiita-markdown-server デモ: https://qiita-markdown.herokuapp.com/ 書いたと言ってもPOSTされた内容をQiita::Markdown
APIのrequest specを書く際、アクセストークンを生成してリクエストヘッダに埋め込んでおくというケースがよくある。そしてリソース単位でファイルを分けるていると、新しいリソースを追加する度に同じ定義をコピペする必要があって辛い。そんなときはshared_contextを使えば共通箇所を別ファイルに書き出せる。ということを覚えた。 spec/support/api_request_contexts.rb shared_context 'user authenticated' do let(:application) do Doorkeeper::Application.create!( name: 'MyApp', redirect_uri: 'http://myapp.com/callback' ) end let(:user) { FactoryGirl.create(:user
コードは多少書けるけど、Webアプリケーションの開発経験はほとんどない、という前提の下読んだ本の感想をだらだらと。 読んだ本 Learn Ruby on Rails (英語) http://learn-rails.com/learn-ruby-on-rails.html 本当に初心者向けなので、半分くらいは環境構築。モデルにActiveRecordは使わずにGoogleSpreadsheetを使って、フォームから登録したユーザにメールで送るという簡単なWebアプリケーションの作り方を紹介している。内容はほとんどないけど、雰囲気は掴めたので一番最初に読んでよかった。 Ruby on Rails チュートリアル http://tatsu-zine.com/books/railstutorial 一冊を通してTwitterライクなWebアプリケーションを作るので、この一冊だけでも一通りRails
RSpecに馴染みがないからか、serverspecの出力結果(特にエラーは)は正直見づらい。もちろん全てパスするのが前提だから、failした時点でそれどうなのよって話なんだけど、サーバの台数やテストの数が多いと結構おかしなところが見つかる。(そして目を細めて画面を見てあーここかーって) 何かいい方法はないものかと思っていたところ、Rebuild ep29 でrspecに-fsというオプションを渡すと自然言語っぽいアウトプットになるといういいこと(常識?)を聞いたのでserverspecで試してみた。 調べたところやり方が2通りあって、コマンドラインで SPEC_OPTS="--format doc" を渡すかRakefileに直書きすればいいらしい。(ドキュメントでは-fd [--format documentation]と書いてあったけど-fsでも同じ結果になった。) $ rake s
sysdig とは? Sysdig is open source, system-level exploration: capture system state and activity from a running Linux instance, then save, filter and analyze. Think of it as strace + tcpdump + lsof + awesome sauce. With a little Lua cherry on top. http://www.sysdig.org/ 上に書いてある通り、一言で言うと strace + tcpdump + lsof + α。tcpdumpのように-wで書き出して-rで読み込めるのがありがたい。 高機能過ぎてまだ全然使いこなせてないけど、ぱっと触った感じ使えそうだなと思ったものを紹介。 1. プロ
普通にapt-get installするとUpstartに繋がらなくて失敗する。 ore@localhost ~ $ docker run -i -t ubuntu:12.10 /bin/bash root@aaee59dede24:/# root@aaee59dede24:/# apt-get install -y mysql-server ... ... Setting up mysql-server-5.5 (5.5.27-0ubuntu2) ... initctl: Unable to connect to Upstart: Failed to connect to socket /com/ubuntu/upstart: Connection refused initctl: Unable to connect to Upstart: Failed to connect to so
先日のVagrantのバージョンアップも無事に済んだので、CoreOSのVagrantイメージでDocker入門してみた。 主に自分用のメモ。 CoreOSのセットアップ ドキュメント通り、Vagrantfileをcloneしてupするだけ。 [~/vm] $ git clone https://github.com/coreos/coreos-vagrant/ coreos Cloning into 'coreos'... remote: Counting objects: 21, done. remote: Compressing objects: 100% (19/19), done. remote: Total 21 (delta 3), reused 19 (delta 1) Unpacking objects: 100% (21/21), done. boxのサイズは121MB
CoreOSを試してみたくて CentOS 5.9 のサーバで Vagrant を 1.2.2 から 1.2.7 へ上げたら動かなくなった。 # rpm -Uvh http://files.vagrantup.com/packages/7ec0ee1d00a916f80b109a298bab08e391945243/vagrant_1.2.7_x86_64.rpm Retrieving http://files.vagrantup.com/packages/7ec0ee1d00a916f80b109a298bab08e391945243/vagrant_1.2.7_x86_64.rpm Preparing... ########################################### [100%] 1:vagrant #############################
veeweeで作ったオレオレCentOS5 boxのネットワーク設定をhost-onlyに変えてreloadしてみたらエラーが出てinterfaceが上がらなかった。他のboxだと問題ないので、OS側で何か設定し忘れたのかなーと調べてみたら余計な設定が入っていたというお話。 Vagrantfile Vagrant.configure("2") do |config| ・・・ config.vm.network :private_network, ip: "192.168.33.10" ・・・ end 実行結果 $ vagrant reload ・・・ The following SSH command responded with a non-zero exit status. Vagrant assumes that this means the command failed! cat
Ubuntuの手順そのままだと上手く行かない部分や省かれている箇所があったので、CentOS6用に書き直したみた。 毎回 sudo と打つのがめんどくさいので、プロンプトが#のときはroot、$のときはgitユーザになってコマンドを実行してます。 参考元: https://github.com/gitlabhq/gitlabhq/blob/5-0-stable/doc/install/installation.md https://github.com/gitlabhq/gitlab-recipes/blob/master/install/CentOS_6.md 1. Packages / Dependencies 主にRubyのため。epelリポジトリはRedis入れるのにも必要。 # rpm -ivh http://ftp-srv2.kddilabs.jp/Linux/distribu
ちょっとしたスクリプトをPerlで書いてて、 $hogeが文字列aのときは文字列a'を返す $hogeが文字列bのときは文字列b'を返す <略> $hogeがどれにもマッチしない場合はhogeを返すみたいなよくある処理をする必要が出てきて、見やすいからという理由で use Switch してswitch文を使ってたんだけど、if/else で書くのとどっちが早いのか気になったのでベンチマークを取ってみた。 別件でperldoc眺めてたら5.10.0から use feature "switch" でPerl6ライクなswitch文が使えることがわかったので、それも比較対象に。 テストコード #!/usr/bin/env perl use strict; use warnings; use Switch; use feature "switch"; use Benchmark qw( cmpt
http://www.emacswiki.org/emacs-en/PowerLine こういうのが欲しかった。ごちゃごちゃして見にくかったモードラインがスッキリ!しかもかっこいい! (元ネタはVimらしい。) powerline.el はカスタマイズするのが大変そうだったのでwikiのsnippetを自分好みに修正してみた。 と言っても色をテーマに合わせたのと %Z と %* を追加しただけ。この二つはあった方が便利なので。 %z The mnemonics of keyboard, terminal, and buffer coding systems. %Z Like ‘%z’, but including the end-of-line format. %* ‘%’ if the buffer is read only (see buffer-read-only); ‘*’ if
最近勉強メモを残すのに Kobito というアプリを使っている。ただこのアプリ、残念なことにMac用のクライアントしかなくて、データもローカルに保存されているので、せっかくメモしても会社のWindows PCから見ることが出来ない。 なんとかして会社からも見たいなと思い調べてみると、データは ~/Library/Kobito/Kobito.db にSQLiteなDBで保存されていることが分かったので、サーバ経由で閲覧出来るようWebアプリを書いてみることにした。 データのアップについてはKobito.dbをDropboxに移して元あった場所にはsymlinkを張るのが一番楽かなと思ったけど、サーバにDropbox内のデータを全て同期させるのはちょっと嫌だし、閲覧専用になら常にMac側がマスターとなるので、ベタにcronでサーバへrsyncすることに。 自宅サーバなため、そのままcronta
普段触る機会の多い CentOS5 との違いで得に気になった点。 テキストモードでインストールが出来ない? そんなことなかった。 最初のgrub画面で [tab] を押して text って付け加えると、テキストモードでインストーラが起動してくれる。 > vmlinuz initrd=initrd.img textあとグラボに合うドライバが無い場合もテキストモードになる。 テキストモードだとパーティション構成やパッケージを選択できない 使用するディスク領域を選んだら勝手にLVMでパーティションが作られて、インストールするパッケージも選べないまま最後まで進んでしまう。tty切り替えて足掻いてみたけどどうにも出来なかった。 LVMが嫌な人は、グラフィックモードかkickstartでインストールするしか無さそう。 sudoしたときにユーザのPATHが引き継がれない これは地味に不便。 /etc/s
http://code.google.com/p/emacs-evernote-mode/ サーバからも Evernote 見れたら便利だよなぁと思って、Debian Lenny サーバに入れてみた。 必要なもの Emacs22 以上 Ruby 1.8.7 以上 Rubyのインストール そもそも Ruby が入っていなかったので apt-get でインストール。 $ sudo apt-get install ruby $ ruby -v ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux] バージョンはなんとかセーフ。 emacs-evernote-modeのインストール readme に書いてある通りに進めるだけ。簡単。 $ wget http://emacs-evernote-mode.googlecode.com/files/evern
このページを最初にブックマークしてみませんか?
『n8.hatenablog.com』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く