scramble cadenza

技術ネタのガラクタ置き場

ruby

Headless Chrome でスマホ用画面のテストと、PC画面用テストを行う

イントロ Headless Chrome で system test を書いていたら、猛烈にハマったので記録を残しておく。 ハマりすぎて Capybara のコードを殆ど読んでしまったので、 読んだ内容を抜粋してまとめてみました。 若干冗長なのはお許し下さい。 環境 rails (5.1.4) ca…

unicorn + capistrano 構成で、古いリリースの実行パスを参照し続けてしまう問題

イントロ 今更だけどハマったので書いておく。 I, [2017-11-15T17:45:38.423986 #7537] INFO -- : executing ["/var/www/app/releases/20171115083608/vendor/bundle/ruby/2.4.0/bin/unicorn", "-c", "/var/www/ser val/current/config/unicorn.rb", "-E", "…

Wercker で build API を叩いてもテストが始まらない件

イントロ 最近 Wercker を使っています。 Wercker でも CircleCI と同じように build を行う API があるのですが、どうしても build の API が叩けなくてハマったのでメモ。 現象 build API を使って build を行うと、Invalid stack というエラーが出る。 エ…

ローカル環境構築を MItamae で自動化した話

イントロ お仕事用 Mac が Mac book pro に変わってしまった。 環境構築をやるのも久々だったのだけれども、dotfiles のボリュームが増えたのと、実はコード化出来ていない部分が多かったりして、かなり面倒だった。 ちゃんともう一度やり直そう、と思って選…

rails 5 を今更触ってみた話

イントロ rails5 の主要機能は色々と知られている通りだけど、業務に投入するとなると、やっぱり互換性だったり、細かいコードの違いが気になるもの。 今回 authlogic を使ったログイン機能を雑に作ったので、その限られた狭い範囲であるものの、ハマったと…

ActiveRecord::Base.connection#table_exists? と ActiveRecord::Base#table_exists? の違い

イントロ # 似ているメソッドで、微妙に挙動が異なり、ちょっとハマったのでメモ 違い 引数、結果をキャッシュするかどうかが違う 引数 ActiveRecord::Base.connection#table_exists? 引数を一つ取る ActiveRecord::Base.connection.table_exists?("users") …

delayed_job まとめ

イントロ collectiveidea/delayed_job なんとなく使ってきて、なんとなくわかってるつもりの delayed_job について、改めてまとめてみたもの。 休日暇だったのでソースコード読んでみたり、step 実行したりして、何処に何が書いてあるかをざっくりとまとめた…

authlogic で、ユーザーの password を編集した直後に強制ログアウトされる件

イントロ authlogic でハマったネタ第二弾。 まとめると以下の様な感じ。 authlogic でログインユーザーを作成 よくある 名前と password で認証するユーザー ログインユーザーを編集する画面を作る password を編集可能にする ログインユーザーの password …

authlogic で blank の password で update 出来てしまう問題

イントロ 情報が古いけど ruby on rails - changing password with authlogic - validation not catching blank inputs - Stack Overflow と同じ現象。 改めてまとめると、以下の様な状態。 authlogic でログインユーザーを作成 ログインユーザーは password…

Capybara::Poltergeist で remote debug が動かない件

イントロ タイトルの通り。Capybara::Poltergest の目玉機能である remote debugging がうまく動作しなくて、色々試行錯誤した話。 https://github.com/teampoltergeist/poltergeist#remote-debugging-experimental 環境 OSX 10.10.3 phantomjs 2.2.0 polter…

embulk-filter-eval というフィルタープラグイン書いた

イントロ まぁ半分ネタも入ってますが、何かちょっとした事を行う程度なら役に立つはず。 mgi166/embulk-filter-eval これは何が便利? input として与えられたカラムに対して、Ruby のコードでちょっとした変換を加える事ができる embulk プラグインです。 …

rbenv の plugins

イントロ 今使ってる rbenv の plugin たち。 rbenv はこういうエコシステムが便利だから使い続けている。 最近務めている会社では流行りのようなので、私もやってみる。 plugins % l .rbenv/plugins/ rbenv-ctags rbenv-default-gems rbenv-gemset rbenv-up…

ActiveSupport::Configurable の話

イントロ よく設定ファイルで見るクラスを簡単に作れる module ActiveSupport::Configurable の紹介 使い方は、rails/configurable.rb at master · rails/rails のコメント文を読んだほうが早い。 よくあるやつ 具体例を幾つか紹介。 引数が違ったり、ブロッ…

ruby-build で、好きな version の ruby を入れるお話

イントロ 毎度おなじみ ruby-build ですが、入れることができる ruby の version と rubygems の version は制限があります。 とはいえ普通に ruby を使う分には、提供されているもので何の問題も無いのですが。 rbenv を使って、ちょっとマニアックな ruby …

ruby で動的にクラスを作る

結論 定数に class クラスのオブジェクトを代入すると、(ruby で一般的な) class として扱われる module or class の配下にネストして class を作る場合、その class が持つ定数として定義する class.new する際に引数として、class クラスのオブジェクトを…

ruby 経験者が90%以上間違える問題

イントロ 弊社の凄腕エンジニアが、タイトルに書いてあることを言いながらメンバーに出してくれた問題です。 もちろん私は 90 % 側ですた。 問題 以下の出力結果はどうなるでしょう? p { :a => 1, :b => 2 } Hash が出力されて Hash が返る、と思ったあなた…

クラスメソッドでインスタンス作る話

結論 クラスインスタンス変数として扱われるっぽいです。 class Klass attr_accessor :hoge def self.hoge(hoge) @hoge ||= hoge end end # @hoge に値が入る Klass.hoge('hoge') #=> "hoge" # もう既に @hoge には値が入っているので、'fuga' は入らない Kl…

berkshelf で path を変更した場合は、knife[:berkshelf_path] を変える。

イントロ これに気づかなくて結構ハマった。 症状 berkshelf を使って、cookbook を install するとき、bundler 風に以下のように path を変えた。 berks install --path vendor/cookbooks すると cookbook が見つからないと怒られ始めた。 ================…

berkshelf を使って rbenv 経由で ruby を install する方法

イントロ chef で環境構築したはいいものの、ruby の install は意外と手間だったりします。 できれば rbenv のようなものを使って、色々な ruby のバージョンを試せる方がいいですよね。 ところが肝心の rbenv を install するレシピの自作は結構シンドい。…

vagrant-berkshelf を使わずに Berkshelf + knife-solo で環境作ってみた話

イントロ タイトルの通り。今までは面倒臭がって全部レシピを書いていたけれど、Berkshelf 使えば、その手間すら省けると聞いたので使ってみました。 ところで Berkshelf は何も考えないと vagrant-berkshelf という Vagrant のプラグインを経由して berkshe…

ruby でクラスメソッドを委譲する方法

方法 SingleForwardable を使う require 'forwardable' class MyFile extend SingleForwardable def_delegator File, :join end MyFile.join('hoge', 'fuga') #=> "hoge/fuga" MyFile のクラスメソッドとして File#join っぽい挙動をするメソッドを委譲 別の…

サンタさんたち? ~サンタの複数形~

イントロ クリスマスネタ。職場のある日常。 時期が時期だし、クリスマスネタを盛り込んだ rails アプリを作成しようと思い立った。 その名も「santa」という名前のアプリ。(ひねり無し) ’santa’ という文字列を与えて、そこからクラスを作成するときに起き…

STDOUT.tty? って何?

時々コードで見かけるので。 標準出力と関連づいているなら true crontab から実行された場合は false パイプでつなげたりして、出力される場合は false 参考 Class: IO (Ruby 2.0.0) Check if Your Ruby Script is in a Pipe

packer 触っててハマった時は veewee 眺めると幸せになれる

イントロ veewee じゃなくて packer 触ってみた話。今だからこそ veewee のおさらい 何故タイトルのようなことを思うかと言うと 「veewee」で作られたテンプレートが、ありとあらゆる地雷を潜り抜けて作られた物だから です。 私は基本的にpacker の公式を読…

まるごと hpricot

イントロ 何かと便利な html parser の説明。 自分用の忘備録も兼ねて逆引きっぽく書いてみるテスト。 主な使用法 Hpricot.parse(Hpricot() でも良い) メソッドの引数に、parse したい html を与える。 search or at メソッドに「検索したい条件」を引数に与…

ruby で最初難しかったけど、わかってきたこと【Enumerator(Generator)】

イントロ 最初理解するのが難しかったけど、ようやく理解できた気がするので書いてみるメモ。 お題は Enumerator と Generator について。 新しさ皆無の n番煎じです。 Generator class Generator Generator は、後で出てくる Enumerator と同じようなことを…

its を使うと NoMethodError で激怒される

症状 NoMethodError in 'App::Client hoge' undefined method `its' for #<ActiveSupport::TestCase::Subclass_1::Subclass_2:0x1035bc058> 初めてエラー見たとき ( ゚д゚)!? ってなってしまったのでメモ。 解決法 it の中に its が入っているので、消す。 一旦気づくと当たり前なんですけどね。初心者あるあるってことで。 b</activesupport::testcase::subclass_1::subclass_2:0x1035bc058>…

はじめまして rspec

始めは rspec 本を読んだり、テストコードを読んだりしたんですが、全く自分で書けるようにはならなかったんですよね(当たり前ですが)。 なんとなく読めるようにはなったけれど。 そこで「テスト読める」から「テスト書ける」の思考ギャップを埋めるための t…

ruby で 多次元hash の初期化するときの話

each の中とかで、いきなり h["1"]["2"] = 2 とかやりたいときの話。 Hash.new して上記のようなことをやろうとすると、エラーになってしまう。 rakkyooの備忘録 では以下のような書き方があるよーと紹介されている。 # 2次元ハッシュの初期化 h = Hash.new …

Mountain Lion で ruby-1.8.7を動かす

前準備 公式サイトの通りにやって問題なかった rbenv をインストールする ruby-build をインストールする homebrew をインストールする やってみたこと 実は ruby-build では、rubyのversionの古いものが install できなかった。(1.9.3はrbenv-buildでインス…