最近はブログに書くようなことを以下のサイトに書いています。ぜひご覧ください。
投稿者: Hiroki Akiyama
Nodeのバージョン管理ツール n を入れた
READMEに載ってる以下のコマンドを使うと一瞬でインストールされた
$ npm install -g n
$ n stable
react-helmet: <head />をReactで書き換えるnpmモジュール
https://github.com/nfl/react-helmet
Reactで metaタグ、titleタグ、styleタグなど <head></head>
に入ってるタグを書き換えたい時に便利なnpmモジュール
以下README.mdの現時点でのExample.
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
調べた
どう考えてもリダイレクト先でヘッダーの指定が無視されているので、コードを追ってみた
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
Mongoidでdependentが無視される
Mongoidでdependentが無視される時、primary_keyが片方だけ指定されていて検索に失敗している場合がある
以下の擬似コードのような状況で動かないなーって思ったら、
class User
include Mongoid::Document
field :user_id, type: String
has_many :pictures, dependent: :destroy
end
class Picture
include Mongoid::Document
belongs_to :user, primary_key: :user_id
end
has_many側にprimary_keyを付け忘れていた
class User
include Mongoid::Document
field :user_id, type: String
has_many :pictures, primary_key: :user_id, dependent: :destroy
end
class Picture
include Mongoid::Document
belongs_to :user, primary_key: :user_id
end
Objective-CでNSStringの定数を定義する
Objective-Cでconstを使ってNSStringの定数を定義する方法について。#define
は問題を起こすことがあるので使わない方がよい。
react-bootstrap-dialogつくった
React Componentのnpm packagesをつくった。React + react-bootstrapの環境で、window.alertやwindow.confirmを使うとUIが浮いてしまうので、<Modal />
を使うんだけど、毎回細かい定義をするのが面倒なので、メソッドのパラメータでサクッといろいろなダイアログを表示できるようにした。
https://github.com/akiroom/react-bootstrap-dialog/
デモはこちらからどうぞ。
Railsのroutesの調べ方
Railsのパス一覧を出す方法は3種類ある。だいぶ今更かなぁと思ってたら意外と知られてなかったりするようなので、ブログに書いてみた。
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)