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

Deviseのログイン後のページ先をユーザーフレンドリーにする

せっかくログインしたのに、トップページに戻ると、なんだこれ?ってなってしまいます。 それを回避する方法です。 class ApplicationController < ActionController::Base before_action :store_user_location!, if: :storable_location? private def stora…

railsで今月・先月の期間を取得する方法

all_monthを使いましょう。 今月の場合 [1] pry(main)> Time.current.all_month => Fri, 01 Dec 2017 00:00:00 JST +09:00..Sun, 31 Dec 2017 23:59:59 JST +09:00 先月の場合 [2] pry(main)> Time.current.last_month.all_month => Wed, 01 Nov 2017 00:00:…

railsの本番サイトのデータベースを別サーバーで行うための方法

今回やりたいことです。 app/dbサーバーを分けて運用する そんなの当たり前だろ!って感じですが、デプロイするときに詰まったので、忘れないために書いておきます。 なお、今回のお話はmysqlでの運用にしておりますが、他のデータベースでも同じ感じでいけ…

chromeで簡易的にパフォーマンスチェックする方法

「推測するな、計測せよ!」ってよく言われるけど、どうやって計測すればいいんだよ!ってパターンはあります。 自分はサーバーサイドをメインでやることが多いのですが、最近話題のフロント側のパフォーマンスについては、どうやって計測するのかわかってお…

最小限の機能で作成していく方法

よく、最小限の機能でリリースしろ!なんて巷で言われますよね。 けど、気がついたらガッツリ思い込みでガチガチに仕様を固めています。 自分はよくそうなるので、どうすればそうならないかを考えました。 というか、最小限の機能で作成する能力って技術の一…

railsのroutesのid以外にする方法

railsはdefaultのresourcesは:idになっています。 config/routes.rb resources :users URIのパターンです。 Prefix Verb URI Pattern Controller#Action new_user GET /users/new(.:format) users#new edit_user GET /users/:id/edit(.:format) users#edit u…

railsでssl設定をした場合にしておいた方がいい設定

ssl対応をやってみました。 はてなブログもssl対応を行っているし、今となっては当たり前になりましたね。 なぜ、そんなことが起こっているかというと、chromeで安全なサイトではないという警告が出るからですね。 そんなsslですが、let's encryptで行うこと…

railsのARに対するpresent?とexists?のパフォーマンスの差

exists?の方がいいですという指摘を受けた。 なので、ここで確認する。 [4] pry(main)> Work.where(id: [*1..100]).exists? Work Exists (0.5ms) SELECT 1 AS one FROM `works` WHERE `works`.`id` IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, …

nginxのmoduleを追加する

nginxにはmoduleという概念があります。 これは、各機能がmodule単位で実装されており、moduleを組み合わせた構成になっています。 moduleには「静的module」と「動的module」の二種類があります。 「静的module」はビルドした時にしか組み込みができません…

debianでmysqlの最新版をインストールする

何も考えずにapt-get install mysql-serverとすると、5.5系になります。 パッケージを更新しないといけません。 https://dev.mysql.com/downloads/repo/apt/ ここに書いてある場所からダウンロードして、更新します。 #wget https://dev.mysql.com/get/mysql…

管理画面に他人の人がアクセスされてきた場合の対処方法

何も考えずにリダイレクトをしていました。 リダイレクトが悪い理由 リダイレクトをするということは、ページがあるということがバレます。 ページがないのなら、404を返すのがベターです。 ということは、404ページを作成して、それを返すのがいいです。 今…

webpackerを使用した時にcssをどこに置くのかについて

webpackerを使用していて、cssをどうするか悩みました。 いや、そもそも何に悩んでいるの?という話だと思います。 jsファイルは原則javascript/packsに存在する→jsから読み込むcssファイルはどこに置く?→javascript/stylesを作成して、そこから使用するよ…

railsでboolean値のvalidationをする方法

ちょっと罠にかかりました。 validates :publish, presence: true いつも通りpresence: trueを書いていました。 こうすると、errorになります。 なぜ、そんなことが起こるかです。 rails/presence.rb at d57356bd5ad0d64ed3fb530d722f32107ea60cdf · rails/r…

SQLでクロス集計をしてみる

SQLって表も簡単に作成できるんだなって最近感動しております。 今回やろうとしていることは、クロス集計です。 年 春 夏 秋 冬 2000 10 10 8 9 2001 9 10 8 9 2002 10 10 8 10 年毎の作品を集計したいとかありそうじゃないですか。 ということで、やってみ…

Deviseでユーザー登録後のリダイレクト先を変更する

Deviseのカスタマイズに少し苦労しました。 大体標準通りに使えば問題ないのかもしれませんが、少し加工しようとするとちょっと調べないといけないですね。 今回行うことは、Deviseでユーザー登録後に、Thanksページに飛ばすことです。 リダイレクト自体は割…

find_by_カラム名のメソッドが動的に生成されていたという事実

例えば、Fooモデルにtitleというカラムがあるとする。 Foo.find_by(titile: "foo") Foo.find_by_title("foo") 下でも検索できる。 いつも上ばっかり使っていたので、下のパターンがあるとは知らなかった。 補足 rubocop的には上の方がいい。 Class: RuboCop:…

ttyとptsについて

dokcer runのオプションで意味不明だったので、調べていました。 docker run -it ←こいつ % docker run --help -i, --interactive Keep STDIN open even if not attached -t, --tty Allocate a pseudo-TTY ここでTTYが出てきました。 TTYとは ttyとは、標準…

ローカル環境のURLをlocalhost以外にする方法

localhostってださいなって思う時があるじゃないですか? そんな時に名前をhostを変える方法です。 /etc/hostsがあると思います。 この設定ファイルに付け足します。 127.0.0.1 foo.com これでrails sするとhttp:foo.com:3000でアクセスできます。 :3000がい…

CSVでファイルを保存するなら、jsonで保存する方が楽ということに気づいた

CSVでhashの値を保存する場合分解しないといけないじゃないですか? めんどくさいですよね。 例えばこういうデータです。 class FooApi HEADER = %w(foo bar baz) def export CSV.open('foo.csv', 'w:utf-8', headers: HEADERS, write_headers: true, force_…

正規表現で〜から〜までのパターン

こういうやつです。 宮藤官九郎(第1話、第2話、最終話)で名前と後ろを分けたい場合。 (?<name>.[^((]*)(?<supplement>.*)? 否定を間に挟んで、それ以外までにする。 これがミソ。 このパターン多いと思うし、覚えておこ。</supplement></name>

正規表現で名前付きキャプチャが便利だった

これがあれば何にマッチさせているかわかるじゃん!って感動しました。 正規表現でキャプチャするときに$1で変数格納されますが、この場合何にマッチさせているのかがわかりづらいときがあります。 何より量が増えてくるとしんどいです。 使い方 (?<name>正規表現</name>…

rubyでeach_with_indexでindexの値を0以外から始める方法

rubyでeach x indexをしたいパターンが多いです。 そのために、each_with_indexというメソッドがあります。 each_with_index こちらは基本的に初期値が0からになります。 array = %w(foo bar baz) array.each_with_index do |x, index| puts "#{index}番目#{…

ActiveModelでcallbackをする方法

Formオブジェクトを使用していて、まともにActiveModelを使用しました。 ActiveRecordの場合は自動的にcallbackを仕込めるのですが、ActiveModelの場合はどうすればいいのかわからなかったです。 使い方 class WorkForm include ActiveModel::Model define_m…

rails5でautoload問題を解決する

やられましたよ。 rails4 → rails5へのアップデートをしていたのですが、libpathの配下のものが読まれない。 config/application.rb config.autoload_paths += %W(#{config.root}/lib) 問題ないだろ。 そう思っていましたよ。 どうやら、この作業が無効にな…

nodeのメモリー足らない問題をswapで回避する

AWSのt2.microだと、メモリーが1Gです。 webpackerを使用していると、普通にdeployで落ちてしまいます。 FATAL ERROR: JS Allocation failed - process out of memory Aborted こんな感じのエラーが出てにっちもさっちもいかなかったです。 memoryが足らない…

gitのリポジトリの中で、issueのURLを開くコマンドを作成した

git

いちいちgitを開けるのが面倒くさいってパターンです。 #!/usr/bin/env ruby require 'open-uri' url = "https://github.com/foo/bar/issues/#{ARGV.first}" system "open #{url}" ファイル名をbin/issueで登録する。 bin/issue 10 これで開きます。 もう少…

rubyでrakeの外部コマンドが失敗した時のエラーハンドリング

webpackerを使用していて、webpacker installって出ているのに、installは失敗していた。 これはムカつくからpullreq出してやろうと思ったら、すでにあった。 さすがだ。 fail hard when webpacker:install ./bin/yarn fails by sealocal · Pull Request #14…

nvmでnodeをインストールしているのに、deployしたら「/usr/bin/env: node: No such file or directory」が出る場合

なんでだよ! node -v => v7.7.4 deploy→/usr/bin/env: node: No such file or directory 確実にインストールはされている。 ということで、シンボリックリンクを貼りましょう。 sudo ln -s "$(which node)" /usr/bin/node ちなみにdebianのversion cat /etc…

rails5からはcontrollerテスト書くぐらいなら、requestテストを書くのがいいっぽい

controllerテストいらねみたいな流れだったけど、requestテスト書けって話だったのか。 Rails 3 と 4 において、controller spec の assigns は慣用されてきました。 今回の RSpec 3.5 はマイナーリリースであり、私たちは SemVer に準拠する以上、 既存の c…

rails5ではrender methodをいたるところで使えるようになっている

rails5にアップデートするときに変更されていて、手を加えて変更したので、備忘録として書いておきます。 rails4.2時代のrenderのやり方 下記のように、requestを強引に擬似るような形でやっていました。 class Renderer def renderer controller = Applicat…