There's an echo in my head

日々のメモ。

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

Herokuのcedar14スタックにlibjpeg.so.62が入っていなかったのでbuildpackを作った

a2ikm/heroku-buildpack-libjpeg62 · GitHub そのときの手順はbuild.shにまとめてある。 やってることはIJGのfilesからjpegsrc.v6b.tar.gz(62だけど6b)から落として来てビルドしてる。 ポイントは次の2点: ./configureのオプションとして.so(動的にリンク…

Route53のレコードをRoadworkerとCircleCIを使ってPull Requestベースで管理する

手元でRoute53のレコードを管理したいんだけど、Roadworkerを使ってRoutefileがPull Requestでマージされたときに自動で行われるようになれば、コメント付きの履歴がとれつつ実際の状態とリポジトリ上のファイルとの一貫性がとれていいのかなと思ってやって…

SingleXLSXというgemをリリースした

Ruby標準のCSVライブラリのように、一枚のシートだけからなるXLSXファイルを読み書きするためのもの。 a2ikm/single_xlsx http://rubygems.org/gems/single_xlsx 使い方 読み 配列の配列で取得する。 Name Age Einstein 76 Feynman 69 SingleXLSX.read("path…

Rails 4.1ではモジュール配下のクラス名をunderscoeするときにacronymの設定を考慮してくれない

ActiveSupport::Inflector.underscore does not respect acronym inflections within a module · Issue #17193 · rails/rails · GitHub の件。 具体的な影響としてはたとえば次のように、SKUという単語をacronymとして設定しても、namespaceでモジュールを切…

knife-soloを手軽に並列に走らせるためのpaknife gemをとりあえずリリースした

とりあえず動くようになったのでv0.0.7と中途半端だけどリリースした。rubygems.orgもしくはGitHubを参照。 概要 次のようにノードを複数指定するとそれらに対して並列にknife soloコマンドを実行する。 $ paknife solo cook node1 node2 node3 同時実行数 …

外部コマンド実行時の標準出力、標準エラーを随時受け取る

Rubyで外部コマンドを実行する手段はいろいろあるけど、そのほとんどは実行し終わったときにまとめて標準出力等を得ることになる。時間がかかるコマンドを実行しつつその出力を随時受け取りたい場合にはOpen3.popen3を使う。 require "open3" Open3.popen3("…

lsyncdとawscliでS3にファイルを同期する

こんな感じ。 s3sync = { maxProcesses = 1, onStartup = "aws s3 sync ^source ^target", onCreate = "[ -f ^source^pathname ] && aws s3 cp ^source^pathname ^target^pathname || true", onModify = "[ -f ^source^pathname ] && aws s3 cp ^source^path…

zshでknife-soloのノード名の補完をするようにした

nodes/*.jsonから補完するように、oh-my-zshのknifeプラグインに書き足してみた。 https://github.com/a2ikm/oh-my-zsh/blob/bd07b185b7e15c201ec00e25487e38b5c3ca9bf6/plugins/knife/_knife 最初はWEB+DB PRESS Vol.83の特集を読んで一から書いてみようか…

homebrewのcurl-ca-bundleパッケージが無くなってた

新しく届いたMacの環境を構築しようとししたら無くなってた → Remove curl-ca-bundle by jacknagel · Pull Request #28658 · Homebrew/homebrew · GitHub 代わりにopensslパッケージが証明書を入れるようになったので、そっちを使うようにした。 export SSL_…

jbuilderで`child!`しなかったときに空の配列を返す

child!を使うと配列の要素としてハッシュを差し込むことができる。 json.users do json.child! do json.name "James F. Cameron" end end #=> { "users": [{ "name": "James F. Cameron" }] } しかしブロックの中でchild!が呼ばれないと、そこは勝手に空のハ…

Capistrano3のタスクの中からエラーを投げる

capistrano-pending gemでREVISIONファイルが無いときにエラーで終わらせたくてCapistranoのコードを読んでみたら、次のようにしてた: if test "[ -f #{current_path}/REVISION ]" # ファイルが存在した場合の処理 else error "REVISION file doesn't exist"…

homebrewで入れたnginxをlaunchctlで80番ポートで起動する

$ sudo su - # ln -s /usr/local/opt/nginx/homebrew.mxcl.nginx.plist /Library/LaunchDaemons/homebrew.mxcl.nginx.plist # launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.nginx.plist LaunchDaemonsとLaunchAgentsの使い分けってどうなってる…

Heroku Buildpackを作ってみた

Herokuにバイナリを組み込むbuildpackを作成するを参考に作ってみた。 heroku-buildpack-yasm heroku-buildpack-mplayer 以下、メモ。 Heroku BuildpackとはHerokuでアプリケーションを動かす環境をパッケージングしたもの。rubyとかnodeとかの環境もそれで…

capistrano-bundlerでデプロイしたときにbinstubがどうこうという警告が出る件の対応

bundlerでbinstubしたrailsコマンドやrakeコマンドを使っていると、次のような警告がbin/rails cしたときなどに表示される: Looks like your app's ./bin/rails is a stub that was generated by Bundler. In Rails 4, your app's bin/ directory contains …

Gemfileを分割すればbinstubしたコマンドがもっと早く起動するかと思ったけどそんなことはなさそう

経緯 Gemfileのなかでrailsとcapistranoの両方を書いていたら、capコマンドを実行するたびにrailsを読み込んで無駄じゃないのか?せっかくbinstubしたスクリプトのなかでGemfileを指定してるんだから、それをcapistrano用に分割すればcapコマンドがもうちょ…

`knife solo clean`でキャッシュをクリア

時々knife solo cookを叩いても、ローカルのレシピへの変更が反映されないことがある。 そういうときはknife solo cleanを叩いて以前リモートに転送したレシピを削除し、それから再度knife solo cookを叩くと直ったりする。 $ knife solo clean HOSTNAME $ k…

MySQLでUPDATE+INNER JOIN

UPDATE foo INNER JOIN bar ON bar.id = foo.bar_id SET foo.col1 = bar.col1 WHERE foo.id < 1000; こんな感じ。 ぱっと調べるとFROM句を付けて説明してるページがヒットしたけど、MySQL 5.6では構文エラーになって悩んだ。

natsortというgemを作った

自然順ソートするやつ。 require "natsort" %w(a 02 1).natsort #=> ["1", "02", "a"] PHPからRubyに移ってきた頃にこことか見ながら適当にmixinしてたものをちゃんとgemにしたんだけど、最近はnturallyとかあるのでそっちを使ったほうがよさそうな気もして…

bootstrap_form-datetimepickerというgemを作った

gem

http://rubygems.org/gems/bootstrap_form-datetimepicker Twitter Bootstrap 3.x、bootstrap_formと組み合わせてbootstrap-datetimepickerを使うときのヘルパを提供する。 たとえば、 <%= bootstrap_form_for(@item) do |f| %> <%= f.datetime_picker :avai…

zshでCtrl-Wで/(スラッシュ)までを削除する

zsh

Re: backward killを見て、~/.zshrcにこんな感じで設定した: tcsh-backward-delete-word() { local WORDCHARS="${WORDCHARS:s#/#}" zle backward-delete-word } zle -N tcsh-backward-delete-word bindkey "^W" tcsh-backward-delete-word

capistrano-pendingというgemを作った

http://rubygems.org/gems/capistrano-pending Capistrano 2で使えていたdeploy:pendingというコミットの差分ログを表示するレシピが3になってから使えなくなっていたので、同じ動作をするものを作った。 Capistranoは3.2.0以上が必要。このバージョンからre…

ActiveDecoratorと組み合わせてJbuilderのpartial!を使うとnil?というキーができる

ActiveDecoratorと組み合わせてJbuilderのpartial!を使ったら、次のようにnil?というキーで空のハッシュができていた。 { "nil?": {}, // .jbuilderに書いた通りのキー } これは、partial!したときに裏で呼ばれるrenderメソッドの:localsオプションにjsonオ…

Mavericksでrails-erdが動かない

OS X 10.9 Mavericksに上げてからrails-erdが動かなくなった。エラーも出さずにハングアップする。 対処方法はGitHubのissueに上がってた。一度dot形式で出力してから変換したところ動いた: rake erd filetype=dot dot -Tpdf erd.dot > erd.pdf Generation h…

accepts_nested_attributes_forを多段で使う

複数の関連を跨いでaccepts_nested_attributes_forを使う場合の話。 たとえば Organization has_many Groups Group has_many Employees というモデルに対して、1度にまとめてこれらのレコードを作成したい場合には次のようにする。 まずはクラスの定義: clas…

capistrano-ec2_taggedというgemのv0.1.0をリリースした

以前Capistranoでデプロイ対象のEC2インスタンスをタグで指定するものを書いているという記事で紹介した、capistrano-ec2_taggedというgemをリリースした。 capistrano-ec2_tagged (0.1.0): http://t.co/Bn9FSwBrgb Get ip addresses of AWS EC2 instances f…

Immutable Infrastructure Conference #1に行ってきた

メモ程度。 @naoya_ito 開発プロセスのはなし https://speakerdeck.com/naoya/immutable-infrastructuregakai-fa-purosesuniyu-eruying-xiang-jia-number-immutableinfra (DBも2つのインスタンスにクエリを投げ続けて、片系ずつマイグレートしていくってで…

Rack::Session::Abstract::IDのsecureオプションをリクエストごとに変えられるようにしてみた

a2ikm/rack-dynamic_session_secure RailsのセッションストアではRack::Session::Abstract::IDに渡される:secureオプションの値によってCookieのsecure属性を付けたり外したりできるんだけど、基本的にベタの値*1しか受け付けていない。 これをリクエストに…

WebMockでスタブしつつSSLのOpenID認証を使う

結論からいうと WebMockでHTTP通信をスタブしつつとSSLのOpenID認証を使う場合には次のようにWebMockを設定する必要がある: WebMock.allow_net_connect!(net_http_connect_on_start: true) どういうことかというと ruby-openidはidentifierがSSL(https://か…

OmniAuthでの動的なパスとOpenID認証

とりあえずメモ。 :request_pathオプションと:callback_pathオプション OmniAuthでproviderを宣言する際に:request_pathオプションにProcを渡すことで、デフォルトだと/auth/:providerとなっているリクエストフェーズ開始のパスを動的に設定できる。 たとえ…

Capistranoでデプロイ対象のEC2インスタンスをタグで指定するものを書いている

capistrano-ec2_taggedというgemを作った。まだrubygems.orgには上げていない。 これはCapistranoで指定タグのEC2インスタンスにデプロイのようなことをやるためのもので、次のようにして使う: # Gemfile gem "capistrano-ec2_tagged", require: false, gith…

このブログに出てくるコードスニペッツは、引用あるいは断りがない限りMITライセンスです。