ウェブサービスを作っています。

ネイキッドドメイン + Amazon S3 Static Website Hosting を、VALUE DOMAIN の DNS で実現する

会社のサイト (userfirst.co.jp) をリニューアルして、Amazon S3 で運用するようにしました。

Middleman で作って、middleman-s3_sync でアップロードしています。

基本的な方法は、以下の記事が大変参考になりました。

Middlemanで生成したサイトをAmazon S3で運用する // qnyp blog

ネイキッドドメインは Route53 が必要との噂でしたが、なんかバリュードメインDNS でもできました。

追記(2014/10/24 15:29):

この記事の方法を使うと、メール (xxx@example.co.jp) が使えなくなりますので、ご注意ください。

メールと併用する場合は、Gehirn DNS の Apex Alias を使うのが良いと思われます。

Gehirn DNS、ホスト名無しのドメインにエイリアス機能をサポート | Gehirn News(ゲヒルンニュース)

追記ここまで

cname @ example.co.jp.s3-website-ap-northeast-1.amazonaws.com.

(最後にドットが必要です)

www つきのバケット (www.example.co.jp) も作って、Static Website Hosting の設定を Redirect all requests to another host name にすれば、ネイキッドドメインに 301 リダイレクトできます。

www つきバケットに対する、VALUE DOMAIN の DNS 設定は以下のとおりです。

cname www www.example.co.jp.s3-website-ap-northeast-1.amazonaws.com.

Middleman で Pow を使う

試した Middleman のバージョンは 3.3.6 です。

プロジェクトディレクトリに config.ru を置く

require 'rubygems'
require 'middleman/rack'

run Middleman.server

Pow の設定

ln -s ~/middleman-project ~/.pow/middleman-project

基本的にはこれだけで良いのですが、なんか更新しても反映されないので、常に完全リロードするようにする

cd ~/middleman-project
mkdir tmp
touch tmp/always_restart.txt

ちょっと遅いけど、これで OK です。

もっと良い方法がありましたら、教えてください。

新生銀行に自動ログインするユーザースクリプト 2014年夏バージョン

追記(2016/06/29 18:10):

以下の方法は動かなくなったため、新しい記事を参照してください。

追記ここまで

Chrome 36 で確認しています。 Chrome や新生銀行の仕様変更で動かなくなる可能性があります。

こちらを参考にさせていただきました。ありがとうございます。 https://github.com/yoko/userscripts/blob/master/shinsei_power_direct_autofill.user.js

新生銀行に自動ログインするユーザースクリプト 2014年夏バージョン

RSpec で sleep を stub する

上記の方法でうまくいかない、ライブラリ内部などで sleep されている場合を考えてみました。

spec/support/stub_sleep.rb

module Kernel
  def sleep_with_stub(*args)
    # do nothing
  end
end

RSpec.shared_context 'Stubbing sleep', stub_sleep: true do
  before { Kernel.send :alias_method_chain, :sleep, :stub }
  after { Kernel.send :alias_method, :sleep, :sleep_without_stub }
end

実行時には、stub_sleep タグをつけます。

describe Foo, :stub_sleep do
  ...
end

Sunspot の search ブロックをメソッドに分割する

Sunspot で複雑な検索を行う場合、検索ブロックが長くなることがあります。

Post.search(include: [:author, :comments]) do
  # complex1
  if complex_conditions1
    with :blog_id, 1
  else
    with(:published_at).less_than Time.now
  end

  # complex2
  if complex_conditions2
    with :author_id, 1
  else
    with(:published_at).less_than_or_equal_to Time.now
  end
end

search メソッドに、ブロック引数が渡されることを利用すると、以下のように書き直すことができます。

Post.search(include: [:author, :comments]) do |query|
  complex1 query
  complex2 query
end

def complex1(query)
  if complex_conditions1
    query.with :blog_id, 1
  else
    query.with(:published_at).less_than Time.now
  end
end

def complex2(query)
  if complex_conditions2
    query.with :author_id, 1
  else
    query.with(:published_at).less_than_or_equal_to Time.now
  end
end