Rails

delayed_job の ワーカー を graceful にする

現バージョン v4.1.2 で、graceful にできないのは、 内部で依存している Daemon に渡すオプションがうまく渡せていないため。 delayed_job/command.rb at v4.1.2 · collectiveidea/delayed_job ここの部分。 そしてこの問題、 https://github.com/collectiv…

`wkhtmltopdf-binary` のバージョンに注意

最新の 0.12.3.1 だと、どうもサーバに中華フォントがインストールされている場合、IPAより中華フォントが優先されてしまう模様 一旦 0.9 系に戻すことで対応した

wicked_pdf が Command Error になる!

ローカル開発で突然PDF生成が死ぬようになった。 エラーはこんな感じ RuntimeError - Error: Failed to execute: ["/workspace/some_project/bundle_bin/wkhtmltopdf", "-q", "--margin-top", "0", "--margin-bottom", "0", "--margin-left", "0", "--margin…

newrelic が 422 エラーまで拾っているので400番台は拾わないようにしたい

自分たちでエラーハンドリング時に明示的に newrelic に情報を飛ばす方式 Sending New Relic handled errors | New Relic Documentation 飛ばさないエラーをymlファイルで個別にフィルタリングする方式 これはつらいw Ruby agent configuration | New Relic…

date_validator gem を使ったバリデーションにおいてオプションで Date.current を指定する際に気をつけること

date_validator に限らず validations のオプションの指定の仕方に注意が必要なやつ。 何が問題か Rails の validation のオプションで validates :birthday, date: {before_or_equal_to: Date.current} のような指定をしていて、 (要するに今日より未来の…

Rails にJSONでリクエストを投げた際に発生する JSON::ParserError をハンドリングする

何が問題か API として公開している Rails Server に対して、Invalid な JSON データを送信した場合、 parse error が発生した場合は、適切にリダイレクトやエラーメッセージの制御を行いたい。 だけど、挙動としては、Controller に到達する前の Rack Layer…

Railsのマイグレーションファイルで add_index する際、 using オプションまで指定する必要があるのか

インデックスの方法を明示的に指定したい場合のみ指定する。 Rails で using オプションを提供しているのはDBによって、インデックスの貼り方を指定できるためで、 MySQL の InnoDB を使っているのに using: :btree する意味は全く無い(してもしなくても結…

TIL

rake の補完が遅くてイライラするのを解消した 古いけどRails公式でこんな記事書いてた Riding Rails: Fast Rake Task Completion for Zsh で、これを zsh のプラギンにしたものをいれた unixorn/rake-completion.zshplugin: rake task tab completion plugi…

Redcarpet の辛いところ

TOC(Table Of Contents) を生成する機能があるのだけど、 見出しに日本語が含まれていると、完全にスルーされてしまう点。 ## これは概要です これを redcarpet のレンダリング処理にかませると・・・ <h2 name="">これは概要です</h2> といった具合。 ## This is overview だ…

204 No Content について

前回の記事 prmd の辛いところ で「手続きクラスをコールするだけのAPIの返り値は No Content で構わない」と書いたものの、 もし今後なんらかの JSON を返却する必要がでてきたら?と考えると、 最初から HTTP/1.1 200 OK としておくべきな気がしてきた。 R…

prmd の辛いところ

HTTP/1.1 204 No Content HTTP/1.1 200 OK + Response は empty みたいな表現ができない。 いや、正確にはカスタム erb テンプレートを全部自分で用意すればできるのだけど、 templates 全体をコピーして持ってくる必要があったりして、保守観点でやや懸念が…

prmd と jdoc で JSON Schema の解釈が微妙に違う問題

要するに JSON Schema を解釈して何かするライブラリによって方言が存在する状態になっている。 jdoc は 204 を表現できるけど、prmd は 202 となっている他、 status code の表現に使う場所が def has_response_body? @raw_link.media_type != "null" end #…

何回も調べてしまう attribute? の定義箇所

ここを見ると query methods と書かれているので、 https://github.com/rails/rails/blob/master/activerecord/lib/active_record/base.rb # == Attribute query methods # # In addition to the basic accessors, query methods are also automatically ava…

Rails の save, destroy は自動的に transaction でラップされる

save and destroy are automatically wrapped in a transaction Both save and destroy come wrapped in a transaction that ensures that whatever you do in validations or callbacks will happen under its protected cover. So you can use validations…

attribute= を定義してる場所

たぶんここ rails/write.rb at v4.2.4 · rails/rails

Rails でJSのライセンス表記が消える

Rails assets - keep license comments デフォルトだと ugilify は先頭のコメントを残す仕組みだし、オプションもあるらしい lautis/uglifier :output => { :ascii_only => true, # Escape non-ASCII characters :comments => :copyright, # Preserve commen…

久しぶりに Wercker で新しいRailsアプリのビルドを実行してみたら、ビルドが途中でこける問題が発生

こんなエラーがでて死んでた /cache/bundle-install/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/runtimes.rb:48:in `autodetect': Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes. (ExecJS::Ru…

Heroku + newrelic Availability monitoring が SYNTHETICS になってた

Herokuの無料プランって定期的にアクセスしないとサーバが休眠しちゃう。 なので、 だいたいスクリプト作って Heroku Scheduler に登録したり、AWSからPingさせたり、 newrelic の Availability monitoring を使って定期的にアクセスさせたりしていた。 今回…

bullet の挙動

N+1 検出用の bullet 便利なので必ずRailsプロジェクトには入れているのだけど、 たまにどっちやねん!となるケースがある。 @offices.each do |office| office.employees.size end みたいな処理の時、SQLとしては以下のようになるので、 SELECT COUNT(*) FR…

7/1 気になった記事

Page Specific Javascript in Rails | Brandon Hilkert Brandon さんはメールで更新通知をくれるし、内容も毎回参考になるものばかり 俺の最近のRailsのJS開発環境を教えてやる - Qiita browserify-rails良いんだけど、npm を使いたくないアレルギーがあるの…

6/29 気になった記事

ひっぱりアクションで直感的にタイマーを設定できる、使って楽しいリマインダアプリ「Gestimer」 RailsでつくったAPIのエラー処理 | 69log RailsでAPIを作るときにいちいちエラーのレスポンス作るのがだるい話 - 鳩舎 【及川卓也・清水亮・羽田野太巳・藤村…

Rails メモ

rails g migration create_xxxs hoge:integer{8} みたいなやつに null falseとか渡せないか 結論: できるのは Rails 4.2 以降で、しかもreferenesかbelongs_toの場合のみ コード:https://github.com/rails/rails/blob/v4.2.0/railties/lib/rails/generator…

Rails メモ

インスタンスをsaveすると、 https://github.com/rails/rails/blob/master/activerecord/lib/active_record/validations.rb#L58 で context がActiveModelのvalid? に渡る https://github.com/rails/rails/blob/master/activemodel/lib/active_model/validat…

6/3 気になった記事

iPhone AC 番外レポート : スマホゲームニュース:iTunes ランキングへの工作・操作広告について 2015年5月の、これだけは押さえておきたいWeb関連の動き | Stocker.jp / diary waifu2x honoka 良さそう ソフトウェア開発で得た教訓22箇条 | 開発手法・プロ…

haml2slimについて

結構辛かった。 なんだかんだで3,4時間かかって変換とエラーつぶしが終わった感じかな? っていうのを会社のエンジニアブログに書いた。 haml2slim でハマった点とその解決方法 | マネーフォワード エンジニアブログ

3/24 気になった記事

オレ流 Pull Request 作業フロー - 詩と創作・思索のひろば 7年働いた時点での私の仕事の極意 - Kengo's blog ウェブパフォーマンスの基礎とこれから Rails, React, Browserify — Medium RailsとReactどうやって組み合わあせてるか事例 asvd/dragscroll 私は…

3/18 気になった記事

メジャーなプログラミング言語とそれらの役割を、素人でも分かるように教えてください。 | Knoh (ノウ) この記事は、Wunderlistのプロダクトデザイナーであるザンダー・ブレイドにより書かれた記事を日本語訳したものです。直訳ではなく一部日本語に編集を加…

突然 rails s しようとして warning: already initialized constant APP_PATH と言われるようになった

セキュリティFIXのOSXアップデートをかけた後の話。 OpenSSLにまた重度の欠陥、修正アップデートは3月19日にリリース:CodeZine これの対策かな?OpenSSL辺りでなにか死んでるっぽかったので、 Rubyを再インストールして解決。 nyangry:app(27m|implement_ho…

ActiveRecord Association がメモリに乗っているか確認する

ActiveRecord::Associations::AssociationProxyのloaded?メソッドを叩けばわかる。 class User < AR has_many :favorites end 4.1.9@2.1.5 (main)> User.first.favorites.loaded? SQL..................................... => false 4.1.9@2.1.5 (main)> lo…

2/20 気になった記事

不可視のFizzBuzz (Ruby) これは・・w ActiveRecord::Calculations#sum Enumerable#sum それでもRailsを選択する3つの理由 フレームワークとアプリケーションの境目 REACT TIPS AND BEST PRACTICES Vim に惚れるシーン(エディタ内で ちょっとした計算をす…

2/13 気になった記事

Rebuilding HipChat with React.js HipChatをReact.jsで作りなおした話 なぜEmberやAngularではなくReact.jsを選んだか等 いま俺たちに必要なのはz-indexの明確な指標だ こんな指標あったんだw 9999が最大だと思ってた グーグル、アイデアからプロトタイプ…

2/10 気になった記事

eager_load, includes あたりまとめ eager ってなんだよ 〖be eager to do〗〈人が〉しきりに…したがっている なんとなく積極的にテーブルをロードしにいく的なニュアンスを感じる やることは、関連のテーブルをJOINしないで個別にロードしてRailsがゴニョゴ…

2/4 気になった記事

hubot + Twilioで寝ている社長を無理矢理起こす 気遣いのあるデザインの裏にある努力 [ #naoya_sushi ] 七転八倒の先に見出したCTO道 グリーCTOに、色々ホンネで聞いてみた【前編】 インフラエンジニアがプレイするべきゲーム「Papers, Please」 Railsのアプ…

01/21 気になった記事

ネイティブと働いて分かった英語コミットメッセージの頻出動詞10つ Docker + Google Container Engine でドカドカ負荷テスト ペアプログラミングして気がついた新人プログラマの成長を阻害する悪習 dotfiles 駆動開発と GitHub で管理する運用方法 絶対に読…

うーむ・・

vim-railsの挙動で https://github.com/nyangry/vim-rails/blob/f74f43246fcfd05bd8610b761a016c046cb5718f/autoload/rails.vim#L717 let class = matchstr(top,'\<Acti\w\w\u\w\+\%(::\h\w*\)\+\>') こういうマッチング処理をやっているところがあって、 ActiveRecord::Baseとかが来るのを</acti\w\w\u\w\+\%(::\h\w*\)\+\>…

Ruby 2.2.0 いれてみた

Ruby 2.2.0 入れてみた $ ~/.rbenv/plugins/ruby-build $ git pull remote: Counting objects: 88, done. remote: Compressing objects: 100% (56/56), done. remote: Total 88 (delta 40), reused 60 (delta 24) Unpacking objects: 100% (88/88), done. Fr…

12/25 気になった記事

javascriptで発生するイベントを間引く Backbone.jsをRailsで使った際の、初期設定とルール "Backbone.Marionette.js: A Gentle Introduction" を今更ながら勉強してみた クライアントサイドで動くJavaScript Template Engine7つ モデルのバリデーションエ…

12/24 気になった記事

Rails 4.2: Active Job, Asynchronous Mails, Adequate Record, Web Console, Foreign Keys ActiveJobはいろいろあるワーカーのラッパー的なやつだったかな それぞれのワーカーのシンタックス覚えなくてもいいようにRails側で口を用意してあげる的な GlobalI…

12/12 気になった記事

気になった記事 次にヒットするのはこの分野?日本にまだ無いFinTechサービス iOSと機械学習 権限管理を実装するときの地味な話 参考になりますね、Userとか主体になるモデルになんでもメソッドはやしてファットになるケースが多々有ります #12 Railsの面倒…

RailsAssetsでRailsアプリのAsset管理を行う

なぜRailsAssetsが必要か Railsアプリに外部ライブラリを組み込む時って結構 直接DLしてapp/assetsとかvendor/assetsとかに突っ込みがち。 でもそれだとRails全体はGitのバージョン管理になってるかもしれないけど、 ライブラリのバージョン管理はできてない…

Rails 4.1.8 でbundle execを省略しようとしてハマった件

Rails 4.1.8 でbundle execを省略しようとしてハマった件 基本的にRails4系から変わった挙動の問題 今まではrailsコマンドやrakeコマンドはscripts/にあった Rails4系からbin/に移ってきた bundle install --binstubs がデフォのrails rakeを上書きしてしま…

12/5 気になった記事

気になった記事 エンジニアの評価観点について 挑戦し続けるために意識していること其の二:新しいことを学ぶときに最初のハードルを下げる2つの考え方 #vgadvent2014 プロトタイピングと仮デザイン指針 CSS Stats [rails][activerecord] 環境チェックに使え…

MacにCalmAVをインストールする

Railsでファイルのウイルススキャンをやりたいので、まずはMac上でやってみるための準備 brew でサクッと brew install clamav confファイルを設置 cp /usr/local/etc/clamd.conf.sample /usr/local/etc/clamd.conf cp /usr/local/etc/freshclam.conf.sample…

root_path なんかを生成している場所

rails / actionpack / lib / action_dispatch / routing / route_set.rb L:275 def define_named_route_methods(name, route) define_url_helper route, :"#{name}_path", route.defaults.merge(:use_route => name, :only_path => true) define_url_helper …

マルチステップ(ウィザード形式の)フォームで役立つかもしれないTips

activerecordのインスタンスにnew的なメソッドが欲しい。 モデルのインスタンスにparamsで渡ってきた値を使って一時的にattributesを設定しておきたい & nested modelのbuildもやって欲しい。 Viewにインスタンス変数を渡す際、一時的にattributesを上書き…

ActiveRecordの複製(as new_record)にはdupを使う

ActiveRecordのdupとcloneメソッドの役割が逆になっていて、 ちょっとハマった。 dupの特徴 (as new_record) idがnil new_record? == true 複製元オブジェクトの値を変更しても感知しない cloneの特徴 (not as new_record) idが複製元オブジェクトと同じ new…

Railsのカラム名にtypeを指定してはいけない理由

STI(Single Table Inheritance)の仕組みで利用するため。 STIの実装方法について調べていると、 どうもクラスを継承させて、継承元のモデルにtypeカラムを追加しているだけ。 なにか情報が不足しているのではないかと疑ってしまったけど、 typeカラムがある…

link_to メソッドでアンカーの指定をする方法

anchorオプションを指定する。 link_to resource_path, anchor: "resource-#{resource.id}" resource_path(@resource, anchor: "hoge") 参考 ActionView::Helpers::UrlHelper Ruby on Rails 4.0 Guide作者: Stefan Wintermeyer発売日: 2013/07/19メディア: K…

Mavericks で bundle install すると libv8 のインストールでコケる

いろいろエラーで怒られるのだけど、結論からいうと brew install apple-gcc42 するのが一番はやい。 Xcodeをインストールしなおしたり、 真面目にエラーを追いかけて、 brew install v8 したり、 gem install libv8 -v '3.11.8.17' -- --with-system-v8 し…

assetsのログを出力させない

Environment Mac OSX 10.7.5 (Lion) ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-darwin11.4.2] Rails 3.2.13 Issues development環境で作業を行う際、下の画像のようにtail -f log/development.logで ログを垂れ流しているのだけど、画面生成の際…