RSpecでredirectするとヘッダーの設定が無視される

Rails4 + RSpec3 のrequests specでredirect後の処理を検証したい時、以下コードのようにheaders部分にIPアドレスを指定しても無視されてしまう。(ちなみにCapybaraだとセッションの検査ができなかったのでできればrspecで検査したいという状況だった)

before do
  params = {}
  headers = { 'REMOTE_ADDR' => '192.168.0.1' }
  get_via_redirect photos_url, params, headers
end

解決方法の結論

実際にIPアドレスを取得するのに使っているメソッド、例えばActionDispatch::Request#remote_ip にmockを設定すればよい。

before do
  params = {}

  allow_any_instance_of(ActionDispatch::Request).to receive(:remote_ip).and_return('192.168.0.1')

  get_via_redirect photos_url, params, headers
end

調べた

どう考えてもリダイレクト先でヘッダーの指定が無視されているので、コードを追ってみた

続きを読む RSpecでredirectするとヘッダーの設定が無視される

OSXでbundle installするとmysql2でエラーが起きる

bundle install すると、以下のようなエラーが表示されて、成功しなかった。

Installing mysql2 0.4.3 with native extensions

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
(以下略)

以下のブログ記事を参考にしたら、一瞬で解決。

macOS Sierra で mysql2 の bundle install に失敗する場合 – ハトネコエ Web がくしゅうちょう http://nekonenene.hatenablog.com/entry/2016/10/31/061350

bundle config build.mysql2 --with-opt-lib=/usr/local/opt/openssl/lib --with-opt-include=-I/usr/local/opt/openssl/include

sendgrid-rubyでカテゴリを設定する

https://sendgrid.com/docs/API_Reference/SMTP_API/categories.htmlが、https://github.com/sendgrid/sendgrid-rubyというgemライブラリで実際にカテゴリを設定する方法がよく分からなかった。

中のコードを読んだりググったりしてるうちに、以下のやり方で送信できることが確認できたのでメモ

client = SendGrid::Client.new(api_key: '0ACkvN4O3jUPEM8HzUAKdvQ7PT1NlGXlIX1jS0x7Gc1wo2ggx07Pd1tllkzUI4mayeRPP')
template = SendGrid::Template.new('aabbccdd-aaaa-bbbb-cccc-ddddeeeeffff')

recipient = SendGrid::Recipient.new('some-user@example.com')
recipients = [recipient]


# ここでX-SMTPAPIヘッダーに相当するデータを構築する
header = Smtpapi::Header.new
header.add_category('My Category No123')

mail_defaults = {
  from: 'noreply@example.com',
  from_name: 'Official',
}
mailer = SendGrid::TemplateMailer.new(client, template, recipients)
mailer.mail(mail_defaults)

続きを読む sendgrid-rubyでカテゴリを設定する

Rubyのbegin…rescueで暗黙的に捕捉されないエラー

RubyではKernel#exitを実行すると、SystemExitというエラーが発生して終了する。Rubyのrescue
節は=>evarの形式でエラーオブジェクトを取得できるので、begin..rescue..endで挟んでみる。

続きを読む Rubyのbegin…rescueで暗黙的に捕捉されないエラー

新しく作ったRailsプロジェクトでRubyMineのNavigate to Decalareに失敗する

新しくRailsプロジェクトを作った時にEventLogに以下のようなメッセージが出てNavigate to Declareを筆頭にいくつかの機能が動かないことがあった

16:10:04 RubyMine Gem Manager
         RubyMine has detected that
         some of the gems required for 'my-project'
         are not installed
         Install missing gems
         (show balloon)
/usr/bin/ruby -e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift) /Users/akiroom/my-project/bin/bundle install
Fetching gem metadata from https://rubygems.org/...........
Fetching version metadata from https://rubygems.org/..
sudo: no tty present and no askpass program specified

Bundler::GemspecError: Could not read gem at /Library/Ruby/Gems/2.0.0/cache/rake-10.4.2.gem. It may be corrupted.
An error occurred while installing rake (10.4.2), and Bundler cannot continue.
Make sure that `gem install rake -v '10.4.2'` succeeds before bundling.

Process finished with exit code 5

rake 10.4.2はインストール済みなのでさっぱり分からず。


なんだろうと思ったら、rvmの影響で/usr/bin/rubyとrubyの指す場所が違っていた

% /usr/bin/ruby -v
ruby 2.0.0p481 (2014-05-08 revision 45883) [universal.x86_64-darwin13]
% ruby -v
ruby 2.1.4p265 (2014-10-27 revision 48166) [x86_64-darwin13.0]
% which ruby
/Users/akiroom/.rvm/rubies/ruby-2.1.4/bin/ruby

ので、Railsプロジェクトの直下に以下のファイルを置いて対応した

.ruby-version

ruby-2.1.4

利用目的からRubygemsを逆引きできるリファレンスThe Ruby Toolboxが便利

ちょっとしたスクリプトを書いている時とかRuby on Railsでアプリ開発してる時に、「画像処理がしたい」とか「Wiki機能をつけたい」とか色々悩んだらこのサイトを見るのが便利

https://www.ruby-toolbox.com/

middlemanのFrontmatterで変数を使う

Frontmatterで呼び出し元のテンプレートに変数を渡すことができる。

layout.haml
!!!
%html
  %head
    %meta(charset="utf-8")
    %title= current_page.data.title
%body
  = yield
index.html.haml
---
title: akiroom.com
---

%p something.

この時、index.htmlにアクセスすると、titleタグの中身は「akiroom.com」になっている。
この変数にさらに「title: #{hoge_var}」というような感じでさらに変数を呼び出したいと思った。
その時どうすればいいか。

続きを読む middlemanのFrontmatterで変数を使う

Rubyで浮動小数点数の加算減算がずれないようにする

問題

Rubyで0.1を足していくと、計算結果がずれるという問題が起きた。例えば、以下のようなコードを書くと、期待しているような計算結果が得られない。

> tmp = 0.0
 => 0.0
> 1..10.times { p tmp += 0.1 }
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999
 => 1..10

続きを読む Rubyで浮動小数点数の加算減算がずれないようにする