読者です 読者をやめる 読者になる 読者になる

Websocket-railsはどう動くのか

なんか仕組み的な ざっくりだと、「クライアント側のJavaScriptと、サーバーサイドのevent.rbがイベントを送受信しあう」って感じ。 まずWebsocketについて 以下を読めばだいたいわかります。他の抽象的な理論ばかりでなくHTTPのヘッダの内容からもWebsocket…

mysqld dead but subsys locked

mysqlを起動させようとしたら、次のようなエラーが出てしまった。 $ sudo service mysqld start mysqld dead but subsys locked 前回は確かmysqlを再起動したら直った気がするけど、今回は直らなかった。 /var/log/mysql.logのERROR部分をみると、以下のよう…

ItamaeのレシピをVagrantに流し込んで環境構築

Itamaeを使ってVagrantの環境構築をするためのgemとして、vagrant-itamaeというものを作ってくださってるようなので、これを使います。 https://github.com/chiastolite/vagrant-itamae vagrantにpluginとしてインストールします。 $ vagrant plugin install…

モデルクラスのインスタンスメソッドで属性を書き換えるにはselfがいる?

探る過程 ARモデル内で、その属性を更新しようとして以下のようなメソッドを書くとする。 # app/models/user.rb class User < ActiveRecord::Base # ... def toggle_roll status = status == "active" ? "inactive" : "active" save! end end Userモデルのイ…

ActiveRecord::Base#reloadの使い方

ARインスタンスをデータベースから再取得する。 例えば別のリクエストで発生したプロセスがDBのカラムを変更したときに、インスタンスにはもちろん反映されない。 変更されたRDBの内容をインスタンスに反映させるのがこのActiveRecord::Base#reloadというわ…

nginxを使ったSSLの設定

参考 Rapid SSLの公式 (nginx) https://knowledge.rapidssl.com/support/ssl-certificate-support/index?page=content&actp=CROSSLINK&id=SO17664 nginx連載6回目: nginxの設定、その4 - TLS/SSLの設定 http://heartbeats.jp/hbblog/2012/06/nginx06.html お…

RailsでHTTPS通信

Railsで全ページのSSL通信を強制するには、configファイルで、 MyApp::Application.configure do # ... # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. config.force_ssl = true # ... end とすればいけ…

Railsの4.2.5 RC2を使う

つい先日(2015/11/06)、Railsの4.2.5のRC版が出ましたね。 http://weblog.rubyonrails.org/releases/ 大江戸Ruby会議で、Rails Guidesのコミッタ、Railsなどにコントリビュートされてる @spikeolaf さんに「RC版でたよね!使ってみてよ!」と言っていただい…

ライトにHTTPレスポンス監視しとくスクリプト書いた

DNS変更してるときに、なんか気軽に、200になったら通知してくれるスクリプトがほしいなと思って書いてみました。 while true do RESULT=`curl --head sample.com | grep HTTP` echo $RESULT if [[ $RESULT =~ "200" ]]; then osascript -e 'display notific…

コマンドラインからMacのnotificationを出す方法

ターミナルからMacの通知を出したいなと思い調べてみました。 以下にありました。 apple.stackexchange.com 最初のdisplayコマンドでは動かず。 AppleScriptの方法で動きました。 osascript -e 'display notification "Lorem ipsum dolor sit amet" with tit…

読んで理解するActiveRecordの設計とActiveSupport::Concern - メタプロRuby第二版

最近Fincでインターンをしている友人が社内勉強会をひらいているということで、そこに強引に参加させてもらってます(ありがとうございますありがとうございます) 今はメタプログラミングRubyを進めております。(この前2版が出たので急いで切り替えた!) 毎週…

HTML5を意識したView Helperを使おう

date_selectメソッドとかではダメで、date_fieldでないとtype="date"がついてくれないことに気づいた。 HTML5から、type="date"が追加されて、ブラウザによって対応は違うものの、このtypeを付随させることのメリットは大きい。 http://dev.classmethod.jp/r…

Railsでmaterializeを使う

bootstrapのdiv地獄から抜け出したいと思った僕たちは、materializeを使うことにしました。 http://materializecss.com/ bowerでinstallする例も見かけますが、fontで不具合が起こったなどの投稿もみかけたので、gemでいれちゃいます。 https://github.com/m…

ディレクトリ内の全ファイルのソースコードの行数を数える

例えば *.rbなファイルだけ対象にしたければ、ディレクトリ内で以下のようにすればおけ。 $ wc -l `find ./* -name '*.rb'` Rails数えてみたら、279929 totalでした。でかい。

Itamaeレシピ集 - Ruby/nginx/MySQL/Redis/etc

Itamaeを使ってみる。 選定基準は、 Rubyの内部DSLで書きたい Ansibleだとそのご期待に添えない でもchefはフルスタックすぎて学習コストが高い... ということでItamae :+1: :+1: みたいな感じです。基本的にRails使うような想定をしております! 構成 以下…

Wordpress(php-fpm)のボトルネックを探る

この記事では、原因を探るためのプロセスをメモしてるので、直接の問題解決に対してのアプローチとしてはいささか冗長であるので、結論を先に書くとプラグインのせいでした。 問題の解決方法だけ知りたい方はプラグインのところまでお読み飛ばしください。 …

PostgreSQLのinet型とはなんなのか

今作ってるサービスをPostgreSQLからMySQLに移行したときに、migrateファイルで「inetなんてメソッドないよ!」って言われてしまった。 inet...?って思ってmigrationファイルを見てみると、どうやら型の名前みたいだ。PostgreSQL専用の型なのかな?と思って…

nginxでサブディレクトリに配置したWordpressが動かないや -> パーマリンクの設定だった

HTTPサーバーはnginxで、Railsアプリをルートに、特定のサブディレクトリのときだけWordpressを動かしたいって感じの設定をしているのだけど、動きません。 nginxは、Rails(unicorn)用とWordpress(fast-fpm)用のvirtualhostを2つ作って、最初は後者にリクエ…

FactoryGirlのcreate strategyを追ってみる

FactoryGirlで、associationメソッドのaliasでuserみたいにassociationのある関連データを生成できるようになった。 動的メソッド感がプンプンするので、知りたいと思ったのでこれを追ってみることにする。 まずはrunnerのrunメソッドから。ここから全てが始…

FactoryGirlで関連データをtrait付きで生成する

ここのissueで議論されていました。 https://github.com/thoughtbot/factory_girl/issues/263 このコミット。 例えば、user has_one ownerなOwnerを作成するとして、spec/factories/users.rbがこんな感じとすると。 FactoryGirl.define do factory :user do …

kaminariを使ってページネーションを実装

@a_matsuda さんの作られた、kaminariを使ってページネーションを実現しようと思います。 自分で実装しようと思うと結構めんどくさいのですが、kaminari使うと一発でできちゃいます。すごすぎです。 まずはGemfileに追加してbundle installします。 gem 'kam…

Capybara+webkitでのJSのテストでのmysqlデッドロックエラー

featureテストで、WebpayのCheckoutHelperをなかなかCapybaraでテストできなかったのでメモ。 Rails integration tests, RSpec, Capybara, and MySQL deadlocks ということでmysqlでdeadlockが起こってしまってたみたい。 以下の記事で解決した。 Rails inte…

ActiveAdminのアセットが影響しないように切り離す

ActiveAdminを使っていると、アセットの汚染が起こるときがあるみたいですね。 ということでActiveAdminのアセットが、admin以外のページのマニフェストでは読み込まれないようにしておきます。 以下の記事を参考にさせていただきました。 ActiveAdminを使用…

DeviseでFacebookのAOuth認証を導入する

Special Thanks OmniAuth: Overview - devise wiki https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview Devise+OmniAuthでユーザ認証を実装する手順 http://qiita.com/kami30k/items/94aec2d94a2b4e9a1d0b 手順 0. さいしょに 最初に、 Remem…

【RSpec】なんかテストでAssociationが反映されなくて困った

モデル間のassociationを変更した時に、エラーが出た。 モデルファイルに記述する関係性も大丈夫だし、属性の名前も変更した。 じゃあとはなんだ...? と思って $ bin/rake db:reset:migrate とかj $ bin/rake db:drop $ bin/rake db:setup とか試してたんだ…

Rails Dev Box on CentOS

AWSのEC2を動かす予定なので、CentOSでかつ、Rubyのバージョン管理ツールはrbenvなRails Dev Boxがほしいと思い。 totzyuta/rails-dev-box-centos · GitHub そのままのスクリプトの環境は下のような感じです。 Ruby: 2.3 Rails ~>4.2 DB: MySQL CentOS 64 KV…

shared_examplesで冗長なテストファイルをすっきりすまーと

RSpecで、おんなじようなexamplesがたくさん出てきたときに、shared_exampleでまとめてしまって簡単にしたのでソースコードのdiffをメモっとく。 summary テストする項目は、作成したメールのうち、 適切な題になっているか 適切な受信メールアドレスになっ…

【テスト編】ActionMailerでメールを送信する

せっかくなのでTDDで。 方針 Emailのテストに関しては以下の記事が非常に丁寧にまとめてくださっていて感謝感激です。 ActionMailer のメール送信テストを RSpec で行う | EasyRamble Emailのテストを書き始める前にRails Guidesのテストの項目に目を通して…

【RSpec】ActionMailer+ActiveJobのテストを書く

メール送信機能は処理時間が長いので遅延処理にしてる場合が多いと思うのですが、遅延処理のテストってどうやって書くねん!って思って苦労したので書き留めておきます。フィーチャテスト(Integration test)のスペックを書く想定です。 めっちゃいろいろ方法…

seeds.rbの使い方とマスタデータの取り扱いついて考える

1. マスタデータの扱いについて rake db:seedするたびにデータが挿入される。 idをインクリメントで自動挿入するときにめんどくさいことになる。 最初に挿入するマスターデータにassociationを張っている場合は、何回も生成してidが更新されると致命的なので…

ActiveAdminで新しいレコードだけ特定formを表示する

ActiveAdminを使っていて、新しいレコード、またはすでに存在しているレコード別々のフォームを表示させたいときには、以下のようにそれが新しいレコードかどうか条件分岐すればok if !f.object.new_record? f.input :status, collection: %w(init ready), s…

Railsで簡単バルクインサート

SQLには複数のデータを以下のようにぼぼぼっと登録する機能があります。 INSERT INTO books (columns) VALUES (values), (values), (values); これはバルクインサートと呼ばれて、普通に3回違うデータをINSERTするよりパフォーマンスがよくなります。 場合に…

idと名前を関連付けるformのselectはcollection_selectメソッドを使おう

collection_selectメソッドの存在を見落としていてselectメソッドで名前を取得して、controllerでそれを対応するidに変換してModel#saveしてしまっていた。 そんなときはcollection_selectメソッドがめちゃ便利なので使い方メモっておく。 定義部分はactionv…

booleanの条件分岐でifは使わない

どっちがいいかな... def is_valid? return false if name == "雑種" || name == "その他" true end def is_valid? if name == "雑種" || name == "その他" false else true end end なんて考えてたらたどり着いた以下の記事。 http://qiita.com/taiyop/item…

FactoryGirlで多対多の関連データを一緒に生成する

以下の記事を参考にさせていただきました。 FactoryGirl で多対多のアソシエーションをつくる http://blog.inouetakuya.info/entry/2013/12/28/205008 FactoryGirlsのアソシエーションのとこは以下から。 http://www.rubydoc.info/gems/factory_girl/file/GE…

Single vs Double Quotes in Ruby

Single vs Double Rubyでsingle quoteとdouble quoteを書くかは非常に迷いどころで、Rubyistたちの中でもどっちがメジャー、みたいなのはそこまでないみたい。 Based on everything I've read and a review of Ruby style guides, I would say there is no c…

Railsでのi18nでymlを使った日本語化手順

Rails Guideのi18nについての記事。ざっと目を通してみる。 http://guides.rubyonrails.org/i18n.html i18nという名前はiで始まってnで終わる間に18文字あるのが由来。なんかファンキー。 I18nのもっとも重要なAPI translate # Lookup text translations loc…

ActionMailerの非同期処理をActiveJob+Sidekiqで

この記事がめっちゃ分かりやすいです。ここに従って進めていきます。 http://qiita.com/QUANON/items/09c87787df6b0d287896 1. Redisをインストール Redisをインストールします。 $ brew install redis Redisについては、以下らへんが詳しいと思う。 Redisと…

ActionMailerのHTMLメールに画像を埋め込む

かっこいいメールを作りたくて、ActionMailerのViewで画像を埋め込めないかなーと思って調い。 以下を参考にしました。 メール - Rails ActionMailer 便利小ネタ集 - Qiitaqiita.com メール内にヘルパーを書き込んでも、パスがうまく反映されない。 Rails 4…

RailsアプリをNginx+UnicornなAWSにCapistranoでデプロイ

Special Thanks Rails 初心者が Capistrano3 で AWS EC2 にデプロイするためにがんばったこと。 - Qiita RailsアプリをEC2にデプロイしてみる。 - xxxcaqui.log 追記@2016/04/29 最近は環境やconfファイルのsetupはitamaeでやるようになりました。めっちゃ楽…

PostgreSQLはじめのいっぽ

MySQLにばっか甘えてきてPostgreSQLの使い方がわからなかったので最初の流れとかメモっときます。 ここを参考にさせていただきました。 http://dev.classmethod.jp/cloud/aws/install-postgresql-on-aws-ec2/ PostgreSQLではユーザのことをロールと呼ぶっぽ…

Amazon LinuxにrbenvなRubyでRails用の環境構築

Special Thanks Amazon LinuxにRuby on Rails環境構築(rbenv + ruby-build + Ruby 2.2.1 + Rails 4.2.1インストール) http://qiita.com/na0AaooQ/items/5bd62e630a2faf051a52 手順 目次 git Ruby パッケージ類 rbenv ruby-build Rails EC2のインスタンスはす…

AWS設定やった手順まとめ

参考サイト 0から始めるAWS入門:概要 http://qiita.com/hiroshik1985/items/6433d5de97ac55fedfde ここの連続の記事を参考にさせていただきながら設定していきます。 さいしょに 最初に以下のことを行っておく。 アカウントを登録 リージョンをTokyoに変更 …

RailsアプリからSlackへ通知する

何かのタイミングでRailsで作ったWebアプリからSlackへ通知を出したいので設定してみる。 以下の記事を参考にさせていただきました。 http://qiita.com/ysk_1031/items/f74c8b8274ec6c58520d 手順 slack-apiというgemを導入する gem "slack-api" config/inti…

ディレクトリ内のファイルを一括リサイズするRubyスクリプト

shokaiさんのImageResizeを使わせていただきました。 gist87b2181035ca702354f3

Deviseでログイン状態を用いた振る舞いテストを書く

Everyday RailsのChapter 8「フィーチャスペック」を参考に作ってみます。 フィーチャスペック = 統合テスト モデルとコントローラの単体テスト、テストデータを作成するためのファクトリを全部まとめて、フィーチャテストを行う。 ちなみにコントローラテス…

RailsアプリをHerokuへデプロイするとき

手順簡易まとめ 結構内容とか分かってない部分を理解していきながらやりたいので、簡易の手順だけここにまとめておきます。 rails_12factorをGemfileに追加 DBのgemを追加 Rubyのversionを指定 production環境でprecompileできるか確認 デプロイ DBのmigrati…

Vimで改行するときに自動でコメントが続くのを無効化する

Vim

以下の記事を参考にさせていただきました。 http://qiita.com/necojackarc/items/1f997481764ed42023a7 以下でいけるとの情報が。 " .vimrc set formatoptions-=ro これがなんなのかってのは、 :help fo-table You can use the 'formatoptions' option to in…

RubocopをVimに組み込んで動的にRubyのSyntax Check

Special Thanks http://qiita.com/yuku_t/items/0ac33cea18e10f14e185 Rubocopとは Rubocopは、ruby-style-guideに従ってコーディング規則にのっとってるかどうかをチェックしてくれるgem。 よりよいRubyのコードを書けるようになるだけでなく、チームでの開…

リモートとローカルのcommitの差分を確認する

Git

リモートとローカルでのcommitの差分を確認したいとき、例えばまだリモートにpushしていないcommitを調べたいときは以下のようにすればok $ git log origin/feature/6_teaser_design..feature/6_teaser_design ソースのdiffを調べるときは同様に $ git diff …