リア充爆発日記

You don't even know what ria-ju really is.

POSTの結果にiframeを含むと画面が真っ白になる件につきまして

未来のぼくへ。 今度はきっとこのページが見つかると思います。 response.headers['X-XSS-Protection'] = '0' でOK。 Chromium's XSS auditor refused to execute a scriptstackoverflow.com

Railsのroutingで.(ドット)があるとエラーになってしまう場合の回避法

こんなルーティングを定義したとき、 get 'tags/:name', to: 'tags#show', as: :tag /tags/foo. とかでアクセスすると、RoutingErrorになる。 回避するには以下のようにconstraintsでスラッシュ以外を許可するとよい。 get 'tags/:name', to: 'tags#show', a…

dockerなcentos7でhttpdをyumでエラー

dockerでCentOS7ベースのコンテナでhttpdをyumインストールしようとしたら、エラーが出た。 Error unpacking rpm package httpd-2.4.6-31.el7.centos.x86_64 error: unpacking of archive failed on file /usr/sbin/suexec: cpio: cap_set_file Verifying : …

Ansibleでrbenvのplaybookを書いてハマったことなど

あらすじ 新規にAWSでRailsアプリをホストするぞ、となったリア充は、dockerでプロビジョニングのデバッグ環境を作ったものの「プロビジョニングツールはChefでいいのか?」という迷いが常にあった。このタイミングでかねてから耳にしていたfabricとAnsible…

fabricとAnsibleを試してみる

背景 AWS上のCentOS7でRailsが動く環境をCMツールで作りたい 仮想的なAWSのCentOS7はdockerのimageで用意した dockerでAWSマーケットプレイスのCentOS7のイメージっぽいのを作る - リア充爆発日記ria10.hatenablog.com Chefはそれなりに使ったことがある。 …

dockerでAWSマーケットプレイスのCentOS7のイメージっぽいのを作る

背景 AWSを使うぞ! AMIはCentOS7にするぞ! 自分でAMIイメージ作るのはめんどくさいぞ! マーケットプレイスでCentOSからでてる公式イメージあるぞ! プロビジョニングはローカルでやりたいぞ! マーケットプレイスのイメージが乗ったEBSは他のインスタンス…

YosemiteでWifiの様子がおかしいとき

Mac

マジでいらついた。時間とられた。ジョブズが生き(ryググればいろんな解決方法がでてくるけど、どれも機能しなかったが、以下の1をやったら治った。 http://www.reddit.com/r/apple/comments/2jwah7/psa_yosemite_wifi_issues_list_of_possible_fixes/

git-completionでブランチの補完がtoo muchなときの対処法

git

git-completion便利ですよね。でも、それなりに歴史のあるリポジトリで git co [TAB] ※co = checkout ってやると、リモートリポジトリとかタグとか全部出てきてウザい。基本、ローカルのが出てきてくれれば充分なのに。そんなときは__git_refsをいじってやる…

RailsでネストされたリレーションのN+1の解決方法

ranking.article.authorみたいなときの話。N+1はincludesつけて回避するのがふつう。 http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associationsで、タイトルのケースも↑のリンクに書いてあるんだけど、こんな感じに書く。

CircleCIでMySQL5.6を使う方法

追記)コメントで教えてもらったけど、今は設定でubuntuのバージョンが変更でき、そこではMySQL5.6などがプリインストールされるので、もうこの記事読まなくていいです。 Ubuntu 14.04 (Trusty) - CircleCIただ、1つ言いたいのは、「使えるようになったら連…

RailsでCircleCIがMySQL5.6をサポートしていないので苦労した話

かつて日記に書いたんだけど、MySQL5.6から導入されたinnodbのfull text indexは割と便利。 http://d.hatena.ne.jp/ria10/20140107/1389071672が、innodbのfull-text indexを利用した機能があるRailsアプリをCircleCIでテストしようとすると絶対にコケる。 …

rubyでループを1から始める

10.times do |i| p i + 1 end のi + 1が可読性悪いというときの話。 で、 (1..10).each do |i| p i end こんな感じで書ける。 さらに・・・ 1.upto 10 do |i| p i end こっちはrubyっぽいけど、実際コードの中にふっとでてくると、以外に頭に入ってこない(…

RailsのValidationで必要なエラーがだけを出すチョイワザ

こんなバリデーションを入れているとする。 validates :login_id, presence: true, uniqueness: { case_sensitive: false }, length: { in: MIN_LENGTH_LOGIN_ID..MAX_LENGTH_LOGIN_ID }, format: { with: /\A\w+\z/i } これだと、未入力でバリデーションに…

Railsでstructure.sqlがやたらコンフリクトするとき

config.active_record.schema_format = :sqlにしたとき、DBがMySQLだと(そうでない場合もなるかもだけど)db:migrate:resetしたりすると、dumpのタイミングでタイムスタンプがずれるのでこんな感じの残念な差分が生まれる。 /*!40101 SET COLLATION_CONNECT…

RailsでModelをDBから分割・整理する

それなりの規模のRailsプロジェクトではよくFat Model問題とかFat Controller問題が課題になってくる。で、Fat Model問題については、Concernsなどに振る舞いを切り出したり、そもそも「それって1つのテーブルに収める必要ある?」というものを分割するなど…

Railsでhttpsでアクセスしてもrequest.urlがhttpを返してきてしまう場合

ロードバランサーでSSL/TLSのデコードを行う場合、ブラウザのアドレスバー的にはhttpsでもアプリからみるとhttpなのでrequest.urlとかimage_urlとかがhttpで返してきて都合が悪かったりする場合の話。このあたりはRailsというかRackの処理になっていて、たぶ…

Capybaraで不定期にElementNotFound(特にCircleCIで)

何事もall or nothingにしたがる人は置いといて、ぼくはせっせと効果的な範囲でテストを書いていきたいと思っていますが、そんなぼくの心を知らずしてか、Capybaraは不定期に以下のようなエラーを吐く。何故か特にCircleCIで。 Capybara::ElementNotFound: U…

railsでhttpヘッダのを確認する

意外とゴリッと出すしかなかった。 request.headers.sort.map { |k, v| logger.warn "#{k}:#{v}" } ゴリっていう音がでるほどじゃないか。

active_decoratorとoctopusは相性が悪い

master-slaveの振り分けを行いたくてoctopusを導入した。 正直octopusはやりたいことに比べてtoo much感がプンプンしているんだけど、他のgemは導入に手間取ったのでoctopusにした。そしたら、あるとき undefined method to_a' for classOctopus::RelationPr…

Rails4でID以外をプライマリーキーにする

かっこつけて「なんでもIDついているのがレイルズウェイです!うぇーい!」とか言っているやつがいるんですよ〜。なぁーにぃ!?やっちまったな!!男はだまってid: false!! add_index!! def change create_table :foo_tables, id: false do |t| t.integer :…

RailsでSTIなfactoryの書き方

Vehicle Vehicle みたいな関連があるときのFactoryの書き方。こんな感じに書くとDRYだし、親モデルのテストにも使える。 FactoryGirl.define do factory :vehicle, class: 'Vehicle' do ~共通的な項目~ end factory :car, parent: :vehicle, class: 'Car' do…

Railsのenumをmodel横断的に使おうとしたときのメモ

複数のモデルにステータスなどの共通した値と処理を持たせたい!と思ってRails4.1のenumを使いつつ、concernなmoduleに切り出そうと思ったら、enumはActiveRecord所属だったので、困ってしまったときのメモ。しょうがないので、ActiveRecordを継承したクラス…

Railsで送信するメールのSubjectに一括で定型文を入れたいときのメモ

Webサービスから配信されるメールって最初にサービス名が入っているじゃないですか。 [HogeFuga] 会員登録のお知らせ みたいに。で、そのタイトルを毎回指定するのを忘れた、とか、忘れたわけじゃなくて、イチイチ入れるのってバカじゃないの?とかそういう…

Coffeescriptでページを離れる前に警告を表示する方法

入力フォームとかで、うっかりバックスペースとか押しちゃって入力内容パー、みたいな事態を防ぎたいケースの話し。beforeunloadというイベントを使う。 $(window).on('beforeunload', (evt)-> return 'hogehoge' ) これでリンク踏んで画面遷移するときはも…

rspecのcontrollerのテストでログインチェックのテストを共通化したメモ

ログインがあるアプリだと、各コントローラでログインしている場合はこう!ログインしてない場合はこう!というテストが書きたくなる。 具体的なテストコードはこんな感じでござる。 describe FoosController do let(:user) { FactoryGirl.create(:user) } d…

paperclipをAWSのS3+Cloudfrontで使うときの設定メモ

ワリと時間かかったのでメモ。config/environments/production.rb config.paperclip_defaults = { storage: :s3, s3_host_alias: 'your.cloudfront.net', path: '/:class/:attachment/:id/:style/:hash.:extension', url: ':s3_alias_url', s3_host_name: 's…

今使っている+今度使ってみたいGemリスト 2014年 夏 ver.

使っているやつ 使っているやつはGemfileを晒す。なお、複数プロジェクトのGemfileをマージしたものなので、全部同時に使ってるわけじゃない。 gem 'rails', '~> 4.1.4' gem "mysql2", "~> 0.3.16" gem 'bootstrap-sass', '~> 3.1.1.0' gem "sass-rails", gi…

Androidアプリ開発の手引 2014年 君がいた夏ver.

最後にAndroidアプリをいじっていたのはもう2年近く前のことだ。2年も経てばスタンダードも大きく変わっているだろうと再度初心に返り、イチからプロジェクトを作ってみたいと思うこの夏。 開発マシン OSX10.9.4 参考 http://developer.android.com/index.ht…

capistrano3 + wheneverでハマったメモ

ハマった内容としては、deployしてもcronがupdateされないという現象。結論からいうと、サーバのroleの設定ミスだった。wheneverのcapistranoプラグインはデフォルトでdbロールのサーバに対してcrontabへのupdateを行うのだけれど、 対象のサーバがdbロール…

Rspec2->Rspec3にバージョンアップしたときのメモ

仕様の変更部分とかそういうのは置いといて、実際に2.14.xで運用していたRailsアプリを3.0.xにアップデートしたときの作業メモ。無くなったメソッドなどは書き換えで対応することとし、後方互換のためのgemなどは一切使わぬゆえ。なので、3へのアップデート…

OSXでECDSA鍵を作ろう

Mac

http://d.hatena.ne.jp/hnw/20140705 を読んで、「ECDSA鍵にしていると一目置かれるのか!」と思ったので即座に対応することにした。鍵長は、最低の256bitでもRSA鍵の3072bit相当ということで、無意味に強度を強くしてもコストの無駄と思うし、どうせ誰に見…

CentOSのyumでSegmentation fault

さくらのVPSでCentOS6.3での話。 たまにしかメンテしないので、いつのタイミングからこうなったのかもよくわからない。困った。そういうときはstraceをかましてみる。 [root@ria10_no_server www]# strace yum update ~snip~ stat("/var/cache/yum/x86_64/6/…

Railsでページビュー(PV)をとるならimpressionist

https://github.com/charlotte-ruby/impressionist「ブログ記事ごとのPVがとりたい!」がカンタンに実現できるgem。PV記録用のテーブルを別途作ってそこにアクセスを記録してくれる。とりまGemfileに設定追加してbundle installからのmigrateで。 Gemfile ge…

Javascript初心者に初心者++程度の自分が言語仕様を説明したときのメモ(第五回)

Javascript初心者に初心者++程度の自分が言語仕様を説明したときのメモ(第四回)の続き今回はnewの動作について。ほぼ、以下のリンクの和訳。。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new 新しいオブジェクトを作…

Javascript初心者に初心者++程度の自分が言語仕様を説明したときのメモ(第四回)

Javascript初心者に初心者++程度の自分が言語仕様を説明したときのメモ(第三回)の続き。前回ではprototypeのメリットの1つである、複数オブジェクトの関数の共有を確認した。今回は、次のメリットのいわゆるプロトタイプチェーンについて確認してみる。プ…

Cannot use 'in' operator to search for 'model' in hogehoge

Uncaught TypeError: Cannot use 'in' operator to search for 'model' in #{element} こんなエラーがでたら・・・たぶんBackbone.Viewのコンストラクタに複数の引数を渡しているのでは。initializeは引数1つしかとらないので、ハッシュで渡そうず。 で、ま…

Javascript初心者に初心者++程度の自分が言語仕様を説明したときのメモ(第三回)

Javascript初心者に初心者++程度の自分が言語仕様を説明したときのメモ(第一回) Javascript初心者に初心者++程度の自分が言語仕様を説明したときのメモ(第二回)第三回目は、prototypeとnewに挑戦。 まず、prototypeとはなんなのか、ということなんだけど…

更新処理のhttp responseステータスには何を返すべきか

method=PATCHな更新処理がサーバサイドにリクエストされ、正常終了したらどのコードを返すか?ということなんだけどね。別にクライアント側で200台のコード判別したいわけじゃないので、200しときゃあいいんだけど、そうするにも他のコードの用途を知った上…

Javascript初心者に初心者++程度の自分が言語仕様を説明したときのメモ(第二回)

今回はthisについて説明することに挑戦。他の多くの言語では、オブジェクトのインスタンス自身を指す予約語として、thisとかselfとかがあるが、Javascriptにもthisがある。 が、Javascriptのthisは状況によって指す内容が変わってくる。それをMDNでは、「thi…

Javascript初心者に初心者++程度の自分が言語仕様を説明したときのメモ(第一回)

なんらかのクラスベース言語の経験がある人向けのJavascript勉強会の第一回メモ。 Javascriptはプロトタイプベースのオブジェクト指向言語 クラスベースではない、ということだけ覚えておいて先に進む。 データ型 プリミティブとオブジェクト型の2種類ある…

件数のキャッシュをcounter_cacheじゃなくてcounter_cultureで

Userに対するフォロワーの数とか、何かの投稿件数とか毎度調べてるとヤバイケースとかではcounter_cacheを使うと思うのだけれど、何かの投稿がステータスを持ってて、それがpublicなときだけカウントしたいときとか、counter_cacheが使えないので自分で実装…

Backbone.jsでClassをまたいだ共通処理を扱いたいときのメモ

twitterの「フォローする」ボタン的なものがあって、それはtwitterみたいに色んな画面(View)に登場する。 ボタンの動き自体は、1つのView(MyAPP.View.UserRelationButton)にまとまっているんだけど、こんな感じで、UserRelationButtonの初期化は、DOMから…

erbでclassなどを条件付きで指定したいとき

ループで回してたりして、ループが一定数超えたらどうにかしたい、みたいなときの話。 <% images.each_with_index do |image, i| %> <%= image_tag image.image.url(:thumb), class: "#{ 'hidden' if i > 3}" %> <% end -%> このように#{ }の中でifをつかっ…

Rails4.1にUpgradeしてRspecでMigrations are pendingと言われるようになったら

Rails4.0->Rails4.1にUpgradeしたのち、DBに修正いれてrake test:prepareしてrspec実行したら以下のエラーがでた。 /Users/ria10/IdeaProjects/ria10-web/vendor/bundle/ruby/2.1.0/gems/activerecord-4.1.0/lib/active_record/migration.rb:389:in `check_p…

viewで1行ごとに何かをはさみたいとき

in_groups_ofを使う。こんな感じ。 <div class="user-content"> <% @items.in_groups_of(3, false).each do |group| -%> <div class="user-content__row"> <% group.each do |item| -%> <%= render item %> <% end -%> </div> <% end -%> </div> 2番めの引数は、最後のループで1番目の引数で指定した数のアイテムがない場合、何を入…

iPadやNexus7のデバッグの神ツール「Edge Code CC」

むかしはAdobe Shadowって名前だったらしい。最近じゃあ、どのブラウザも標準で優秀なデバッガが付いているけどタブレットやスマホ向けのCSSを書いていこうってなると、それらは使えないのでどうしよう。というときの話。そんなとき、このEdge Code CCを使え…

Photoshopでガイドを引いてばかりの人生に疲れたら

デザイナをヤメるかGuideGuideを使おう。 デザイナのヤメ方 http://www.miyax.net/taisyoku-2/ ※デザイナ以外でも使えます。 GuideGuideの使い方(CCの場合) http://www.guideguide.me/ からDownload Extension Managerをインストールしておく CCならメニュ…

ラスタライズとは

この世にはラスターとベクターの2つがある。ベクター(Vector)とは、ざっくりいえば、ディスプレイなどの解像度に依存せず、拡大縮小してもキレイに保存される状態。一方で、どのデバイスでもかならず同じように表示されるとは限らない。ラスター(Raster)…

デザイン未経験者がタブレットをメインターゲットにしたWebデザインの際に考えるべきことのメモ

もう、なんでもやる。デザイン領域だって聖域ではない。 木の葉が舞えば木の葉に雪が降ったなら白狐にでも化けるまでまあ忍法みたいなものさ。このメモは、構成(ワイヤーフレーム)作業は終わっていて、画面割と各画面に何を載せるのかが決まった後の話。 …

railsのlink_to_ifにブロックを渡す

link_toにlink_to_ifはあるけど、これにブロックを渡す方法がない。ので、つくろうと思ったらもう作っている人がいた。 http://stackoverflow.com/questions/10305180/rails-how-can-i-show-a-block-with-or-without-a-link-based-on-a-condition-link丸パク…