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

珈琲駆動開発

RubyとRailsがおおい

Wordpressの記事データをRailsのDBに移行する

目次 目次 おおざっぱな流れ 移行するデータ 1. CSVを抽出 記事データ カテゴリ タグ Primary Category 画像データ サムネイル 2. mysqlでimportする 記事データ カテゴリデータ 記事とカテゴリの関連付けデータ タグデータ 記事とタグの関連付けデータ Prim…

Googleのモバイルフレンドリーテストのデバイス判定が適切にされないとき

Googleのモバイルフレンドリーテストの際に、mobile用のViewが適切に読み込まれていないことに気付きました。これはページランクに影響が出る可能性大なので早急に解決すべき問題。 k0kubunさんのrack-user_agentを使って、RailsのAction Pack Variantsを用…

React x Railsでデータの同時編集ロック機能を実装する

検討 競合する可能性が大いにあり、かつデータの整合性が非常に重要な部分の実装なので、今回の場合は楽観的ロックではつらそう。では悲観的ロックではどうか。 悲観的ロックとは、 悲観的ロックとは、DBMSの行ロック機能(SELECT FOR UPDATE句)を利用して…

Reactでロード中indicatorを表示するcomponentをRailsに組み込む

react-spinkitを使ってみます。 github.com 以下にデモも用意してくれてます。 React Spinkit classnamesとobject-assignというライブラリを使用しているので、こちらをnpmでインストールしておくのを忘れないように。 GitHub - JedWatson/classnames: A sim…

Railsで標準クラスへメソッドを追加してNumericの桁数を求めれるようにする

Numericクラスに、桁数を返すメソッドを追加したいと思ったので、Railsに乗っていて標準クラスをオーバーライドするプラクティスあるのかなーと思って調べてみましたが、特に決まったものはなさそうです。 ruby on rails - Railsで既存クラスへのメソッド追…

impressionistでcounter_cacheがうまくupdateされない

PVの測定にimpressionistというgemを使っているのですが、このimpressionistにはRails3くらいに実装されたcounter_cacheの機能を簡単に盛り込めるようにしてくれるオプションをis_impressionableメソッドにつけてくれてます。 ですがこいつがうまくupdateさ…

HTMLのタグを除去して文字数だけをカウントしたい

Rubyで例えばブログみたいなシステムを想定して「DBの中身はHTMLなんだけど、タグ部分は除いて純粋な本文の文字数のみをカウントしたい」ってとき。想像以上に簡単にできちゃうのでメモ。 Nokogiriを使えば以下のようにすればok。 Nokogiri::HTML(source).xp…

Reactでタブ機能を実装

以下を参考にしてReactでタブを実装します。 https://toddmotto.com/creating-a-tabs-component-with-react/ Componentのデザイン 以下のようなComponentを作成することを目指します。 <Tabs> <Pane label="Tab 1"> <div>This is my tab 1 contents!</div> </Pane> <Pane label="Tab 2"> <div>This is my tab 2 contents!</div> </Pane> <Pane label="Tab 3"> <div>This…</div></pane></tabs>

Railsでログイン機能を自作する

はじめに deviseを使いたくないし、と思ったらsorceryは開発終了してしまってるみたいだし、monbanはきになるけどproductionに載せるには少し不安だ...。 ということで、僕がきいてる限りだと大きな会社のアプリケーションだとかなり自作の事例の方が多いみ…

【動的VS静的】Railsの404/500エラーページ 静的の勝利

揉めに揉める議論 最初、もりじゅんさんの以下の記事を参考にさせていただこうとしたのですが、 morizyun.github.io Qiitaでも(多分もりじゅんさんの記事を参考にした)同じ例をみかけて、そこでyuki24さんが、この方法はあまりよい方法でないというコメン…

pg_dumpの実行時にパスワード入力を省略する

pgではpg_dump実行時に必ずインタラクティブなパスワードの入力を求められるのですが、cron jobでのpb_dump実行時に、パスワードの入力を省きたいって感じのことです。どうやらパスワードを渡す方法はないみたいですね。 PostgreSQL公式docのpg_dumpのところ…

PostgreSQL初期設定 in EC2

以下を参考にさせていただきました。 http://dev.classmethod.jp/cloud/aws/install-postgresql-on-aws-ec2/ 手順 PostgreSQLをインストールします。 $ sudo yum update -y $ sudo yum install -y libxslt.i686 $ sudo yum install -y postgresql postgresql…

Capistranoデプロイ時にwheneverのタスクでinvalid byte sequenceのエラー

Capistranoでのデプロイ時に、デプロイフックでのタスク中で以下のようなエラーが出るようになりました。 DEBUG [67444af4] Command: cd /var/www/onebox/releases/20160426053048 && ( export RBENV_ROOT="/usr/local/rbenv" RBENV_VERSION="2.3.0" ; /usr/…

Rails+Reactにbrowserifyを導入する

react-railsでReactを導入してるRailsアプリにbrowserifyを導入します! JSのモダンな環境に関してはめちゃくちゃ素人なので調べた過程で読んでよかった!な記事を順番になるようにメモしておきます。 最初に読みたい記事 最初に読んでおいたらいいなと思っ…

Webpay::Mockで決済周りのテストを書く

この記事 qiita.com とかを参考にしながらWebpayでの決済機能は実現できたものの、テスト書くのどうしよ。。 と悩んでいたところでWebpay::Mockというものを用意してくださってくれていることに気付く。 決済周りの処理のテストを書く方法をメモしておきます…

全アクション共通メソッドを利用してナビゲーションバーに検索フォームを配置する

検索フォームをナビゲーションバーのような共通viewファイルに置くにはどうしたらいいのか、一瞬迷ったのでメモ。 今回は、以下で作成した検索フォームをnavigation barに配置したいと思います。 totutotu.hatenablog.com 実装 Railsでは、全てのController…

Railsで検索機能を実装する

Special Thanks 以下の2つを参考にして実装しました。 github.com ruby-rails.hatenadiary.com 実装 Railsで、ransackを使ってObjectベースな検索機能を作成していきます。 今作成してるCofwaというコーヒーコミュニティアプリケーションで、豆のブランドの…

URLのパラメータにid以外を使う方法

/users/:idではなく/users/:usernameみたいにURLにid以外のパラメータの値を使う方法です。 以下でいけます。 resources :users, param: :username パラメータにするカラムはunique設定されてることを一応確認しておきましょう。 基本的にidはアプリケーショ…

deviseに疲れたのでsorceryでユーザログイン機能を実装

deviseの代替案として、前々からsoceryいいよなんてきいてたので使ってみます。 github.com @komagata さんにおききしたらつらみはそんなに減らないとなったのが一瞬頭によぎる @komagata devise、つらみを感じてます...。あとはSorceryとかをよくきくのです…

Railsでのテスト時に`test_after_commit`のgemが読み込めないエラー

こんな感じのエラーに出くわした。 /Users/totzyuta/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/bundler-1.11.2/lib/bundler/runtime.rb:80:in `rescue in block (2 levels) in require': There was an error while trying to load the gem 'test_afte…

Twilio+Deviseで電話番号(SMS)ユーザログイン機能を実装

電話番号認証、サービスによってはすごい比率が高いらしいので実装したいなと思います。 目次 目次 方針の検討 1. 電話からの音声案内 2. 情報をアプリケーション側で開示した後、ユーザがSMSを送信 3. アプリケーション側から6桁の番号を送信、ユーザはそれ…

deviseでemailの確認を行わずにuserを保存する

deviseでconfirmableを使ってemailのverificationを行うようにすると、SNSログインを使ったユーザなりもともと登録されてたユーザなり全て送信されたメールの確認が必要になっていまいます。 そんなときの逃げ道。#skip_confirmation!を使えばよいようです。…

Wordpressでinstall.php実行しようとしたらredirect loopになるとき

WordpressのURLのルートからinstall.phpにリダイレクトされるときに、 example.com/index.php/wp-admin/install.php みたいになってリダイレクトループしてたのですが、ふいに思いついて example.com/wp-admin/install.php にパスを書き換えてアクセスしたら…

deviseで各種OAuthのSNSログイン実装 [Twitter,Facebook,Google,Yahoo!]

OAuthでの各種SNSログイン機能を、deviseを使ってるところに実装したので、それぞれ参考にした資料とかまとめておきます。 Twitter && Facebook deviseを使っていれば、以下の記事に従えば簡単に実装できます! qiita.com Twitterでレスポンスのデータサイズ…

curlで天気予報取得するのがめちゃくちゃかっこいいのでtmuxのスクリーンセーバにした

こんなツイートをみかけました。 How do you check the weather? curl wttr.in — Sure thing! #wttrin pic.twitter.com/mgYzW2ajyq— Igor Chubin (@igor_chubin) 2016, 2月 20 めちゃくちゃかっこいい!!! http://wttr.in/ github.com Tokyoの天気を表示す…

Adminなlayoutを設定する

以下を参考に。 stackoverflow.com まずは、Adminで区切られる名前空間のコントローラーに共通する親コントローラを作成します。 class Admin::BaseController < ApplicationController layout 'admin' before_filter :require_admin_user end こうすること…

クレジットカードの支払いが今月いくらなのかスクリプトで計算したかった人生だった

クレジットカードの請求額が高くてほんまかよこれ...ってなったので確かめたかったんだ。。 スクレイピングして値段だけ抽出して計算するだけ。あとあとから分割払いに変更していく感じの計算を自分でしたかったんだ。。 curlとか叩けないのでソースコードは…

nginxでドメイン間301リダイレクト

今までnginxのリダイレクトにはrewriteを使っていたのですが、どうやらこれはバッドプラクティスっぽいです。正解は、returnを使うようです。 以下が非常に参考になります。 hachibeechan.hateblo.jp 仮想サーバは分けましょう。 server { listen 80; server…

Reactで動的に生成したformでautofocus

Reactで、動的にformを生成した時に、そのformが生成された時にautofocusを当てたいという場面がありました。 以下を参考に。 reactjs - React set focus on input after render - Stack Overflow componentDidUpdateでObjectを指定してfocus()メソッドを使…

NginxでSSLの設定でredirect loopが起きる

以下の記事で解決策が。 リダイレクトループが起こり、上手くNGINXのセットアップが出来ない(修正) | Lunasysはうす 読んでいると、なるほど、CloudFlareにも触れられていたのでCDNも考慮しないといけないのか。 ということでリダイレクトのところで$http_x_…

nginxでURIによってSSL設定を振り分ける

Nginxをフロントに置いて、URIによってUnicornとphp-fpmにリクエストを振ってRailsアプリとWordpressを動かしているのですが、Wordpressの方をHTTPSでリクエストしたくないので、SSLはUnicornの方だけにしたいって感じのとき。 SSLの設定とサブディレクトリ…

AWSのEC2でeventmachineがgem installできない

長いことはまっちゃってましたが以下の記事で救われました。 stackoverflow.com 以下のコマンドで。 $ yum install gcc gcc-c++ native extensionをbuildするためにC++用のgccも必要だったみたいです。

AWSにitamaeで新しい環境を構築してデプロイする流れメモ

今回の記事は、AWSでEC2インスタンスを立ててitamaeのレシピを流す一連の流れのメモです。 手順 1. AWSのEC2インスタンスを起動 以下などを参考に。 qiita.com 2. ssh keyをローカルにもってきてconfigしとく HostNameで簡単にsshできるように設定しときます…

itamaeでディレクトリを作成するレシピ

/var/wwwとかにデプロイしたいときに、最初からディレクトリが作られててほしいです。 これもプロビジョニングの範囲内なのでitamaeでやりたい。 以下のようにするとディレクトリを作成することができましたー directory "create www dir" do action :create…

Vimで開いてるファイルをRubyMineで開く

Linuxコマンドが便利なので基本的に開発はシェルの中でvimを使ってるのだけど、ときどきRubyMineを使いたくなるときがある。 外部ライブラリのメソッド定義へジャンプするときとか、外部ライブラリのメソッド定義へジャンプするときとか。 以下でそのままRub…

同一モデル間の中間テーブルを作成する

同一モデルを含む中間テーブルを作成して、そこでhas_oneやhas_manyしたい状況がありました。 以下がとても参考になりました。 has_many :through の関連に同一モデルを含む場合【rails4】 | Coma's Tech Blog HABTMでforeign_keyとかclass_nameを駆使してみ…

ランダムな英数字の文字列を生成する

大文字と小文字を含めたランダムな英数字の文字列を生成したい。ということでメモ。 以下で大文字+小文字+数字な配列が得られます。多分かなりシンプルなスクリプトなはず。 > [('a'..'z'), ('A'..'Z'), (0..9)].map { |e| e.to_a }.flatten これを使って、…

swiftをREPLで 

REPLでswift使いたいなーと思い。調べてみると、どうやら標準でSwiftのREPLが実は用意されてるらしい。 Swiftのインタプリタモードが楽しい - Qiita lnで/usr/binにシンボリックリンク貼ろうかなと思ったら、File existsと言われたので実は最初からswiftコマ…

Ruby処理系をテストする

これからRailsとRubyをmaster, trunkにちゃんとアップデートして、差分を読んでいくみたいなことをしていきたいなぁと思って、どうせならテストを回せるようになりたいと思い。 RubyKaigi2015で発表されていた以下のスライドが非常に参考になります。ruby co…

railsコマンドでundefined method `register_preprocessor' for nil:NilClass (NoMethodError)になる

長らくしてなかったプロジェクトでbundle updateしたら、bin/rails sなどのrailsコマンドが動かなかった。エラーメッセージは以下のような感じに。 /Users/totz/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/less-rails-2.7.0/lib/less/rails/railtie.rb…

Rails 5.0.0-beta1が出た && API mode使ってみた

今朝、ついに出てましたーー Rails 5.0.0.beta1: Action Cable, API mode, Rails command, https://t.co/Q1Q85ciiNM – It's out! "gem install rails -v 5.0.0.beta1" and party!— DHH (@dhh) 2015, 12月 18 ということで、Release Notesは以下に。 Riding R…

deviseとmobyletteでNo renderer defined for format: mobileになる

mobyletteのmobileとのviewファイルの切り替え方法が、MIME typeを変えるという非常にワイルドな方法なために、deviseでのrespond_with()で mobile なんてフォーマットのrendererねえよって言われてしまう。 これは、Railsのrenderを担当してるControllerに…

Rails4系でのActionCableの使い方

Rails4でリアルタイムなチャットアプリを実装しながら、ActionCableの基本的な使い方をみていきたいなと思います。 完成形こんな感じ。 作ったサンプルアプリは、以下に置いております。 github.com 以下の記事を参考にさせていただきました。 Rails 5's Act…

Rubyばっか書いてる人のためのJavaScriptオブジェクト指向入門

まずRubyでのオブジェクト指向と言語要素に慣れている場合はJavaScriptのオブジェクト指向でかなり違和感を覚えるような気がします。 JSは全てがオブジェクト (プロトタイプベース:後述) なんかRubyの言ってることと似ているが伝えたい意図が全く違う JSのオ…

個人用としてのIaaS/PasS比較

今使ってる個人用仮想サーバーがGMOのVPSで、結構前から使っててCentOSがめちゃくちゃ古かったり(5.5だったw)、そのプラン自体がそろそろなくなってしまうということだったり、寿司を送り合うコミュニケーションツールを作ってるのでせっかくそれをデプロイ…

Railsに絵文字の画像を追加する

gemojiを使って絵文字を追加する方法です。 https://github.com/github/gemoji まずはgemをbundle # Gemfile gem "gemoji" $ bundle installしたら、Rakefileに以下を加えます。 load "tasks/emoji.rake" そしたらおもむろにrakeタスク実行 $ bin/rake emoji…

MySQLが落ちる現象の原因を探る

/etc/mysql/my.cnfを見てlogファイルの場所を確かめる。 /log/mysql/log/error.logだったので、見てみる。エラーが出ている。 怪しそうなメッセージをかたっぱしからググってみる。 たどり着いたのはstack over flowの以下の質問。 mysql error The InnoDB m…

swap領域の設定の仕方

以下を参考にswap領域の設定を行ったのでメモしておきます。 https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-14-04 使用するOSはubuntuです。 swap領域の確認 swap領域の確認の仕方で一般的なのは、swaponとfreeコマンドです…

ActiveSupportのメソッドを素のRubyスクリプトで使う

今回は、ActiveSupportのyesterdayメソッドを例にやってみます。 ActiveSupportのyesterdayメソッドは、名前空間全部含めると、ActiveSupport::CoreExtensions::Date::Calculations.yesterdayでした。 https://github.com/rails/rails/blob/master/activesup…

RailsでPCとスマフォのViewを切り分ける

スタイルシートは分けてマニフェストを書いているのですが、Viewファイルをスマフォ用に分けるかどうかは多分誰しも一度は悩んだことがあると思います。 Viewファイルを一緒にするメリットは 保守が楽になる: 機能追加などによるPC、スマフォ両方のUIの変更…