2014年12月27日土曜日

MacにAWS-ElasticBeanstalkコマンドコマンドツールをインストールする方法


AWS-ElasticBeanstalkコマンドコマンドツールをインストールする方法のメモです。

zipのダウンロード

cd ~/Workspaces/aws/Elastic-Beanstalk/
curl https://s3.amazonaws.com/elasticbeanstalk/cli/AWS-ElasticBeanstalk-CLI-2.2.zip -o AWS-ElasticBeanstalk-CLI-2.2.zip

zipの解凍

unzip AWS-ElasticBeanstalk-CLI-2.2.zip

bashrcに環境変数を追加

echo 'export PATH="$HOME/Workspaces/aws/Elastic-Beanstalk/AWS-ElasticBeanstalk-CLI-2.2/eb/macosx/python2.7:$PATH"' >> ~/.bashrc

bashrcのリロード

source ~/.bashrc

確認

eb --help

ヘルプが表示されれば成功。

Macにboot2dockerとfigをインストールして使う方法

boot2dockerのインストールと設定

インストール

下記よりpkgをダウンロードして、インストールできます。

GitHub - boot2docker/osx-installer

期化

$ boot2docker init

開始

下記で、boot2dockerを起動できます。

$ boot2docker start

起動すると、下記のように表示されるので、これを、.bash_profileに追加する。

export DOCKER_HOST=tcp://192.168.59.103:2376
export DOCKER_CERT_PATH=/Users/jun1/.boot2docker/certs/boot2docker-vm
export DOCKER_TLS_VERIFY=1

または、下記を実行すると、良きに環境変数を変更してくれます。

$ $(boot2docker shellinit)

figのインストール

インストール

figを 公式サイト(Fig)に従って、以下を実行してインストールします。

curl -L https://github.com/docker/fig/releases/download/1.0.1/fig-`uname -s`-`uname -m` > /usr/local/bin/fig; chmod +x /usr/local/bin/fig

確認

インストールが終わったら、確認。

$ fig --version
fig 1.0.1

コンテナの起動

設定ファイルの作成

コンテナを起動するには、YAML形式の設定ファイルを fig.yml を作る必要があります。

今回は、nginxのコンテナを動かすパターンです。
Docker hubはここ => dockerfile / nginx

fig.ymlを下記のように記述します。

nginx:
  image: dockerfile/nginx
  ports:
    - '80'
    - '443'

起動

ターミナルから、下記を実行します。

$ fig up -d

-d : デタッチモードで起動

そうすると、数分で作成されます。

動作確認

$ fig ps

すると

 Name     Command   State                       Ports
--------------------------------------------------------------------------
fig_nx_1   nginx     Up      0.0.0.0:49153->443/tcp, 0.0.0.0:49154->80/tcp

こんな感じになります。
State が Upになっていれば、ちゃんと動いてます。

Docker の ipの確認のため以下を実行すると

$ docler ip

結果が返ってくるので、

192.168.59.103

下記をブラウザでアクセスすると。

http://192.168.59.103:49154/

nginxが起動してることがわかります。

enter image description here

ざっとこんな感じです。


$ fig stop

で停止します。

2014年12月25日木曜日

Rubyで相対パスを絶対パスに変換する方法

スクレイピング中に、リンクが相対パスで記述されていることが、よくあるのですが、そのリンクのパスを絶対パスに変換したい時ってないでしょうか?

私は、結構あります。

そんな時は、下記のようにすると相対パスを絶対パスに変換できます。

require 'uri'
require 'open-uri'
require 'nokogiri'

url = 'http://www.sample.com'

charset = nil
html = open(url) do |f|
  charset = f.charset
  f.read 
end

doc = Nokogiri::HTML.parse(html, nil, charset)
pdf_list = []
doc.xpath('//a').each do |node|
  next if node.attribute('href').blank?
  p href = node.attribute('href').value

  href.match(/.*\.pdf$/) do |md|
     pdf_url = md[0]
     pdf_url = URI.join(url, pdf_url).to_s # 相対パス => 絶対パス
     pdf_list << pdf_url
  end
end

http://www.sample.comのページから、pdfのリンク先の一覧を取得するようなものを想定しており、pdf_listに pdfのurlの一覧が格納されます。

2014年12月24日水曜日

AWS Elastic Beanstalkで作られたS3 のバケットを削除する方法

Elastic Beanstalkを使って、試しの環境を作成して、
使い終わったので、環境を管理コンソールから削除したらS3のバケットだけ残ってしまった。
しかも、手で削除しようとしたら、以下の”パーミッションがない”的なメッセージが出て削除できなかったため、なくなく調べました。

You don't have permissions to delete this bucket. You can check your bucket's permissions within bucket properties

バケットの [Permissions] > [ Edit bucket policy]を開いて以下のように修正。

"Effect": "Deny" => "Effect": "Allow"

設定を保存して、削除すると無事に削除できます。

RubyでStringからTime型に変更する方法

タイトル通り、RubyでStringからTime型に変更する方法です。

文字列から、Time型に変換したい時ってちょくちょくあると思います。
そんな時は、Time.parseを使います。

例えば、

20141105134054

みたいな文字列を、Time.parseに渡すと。

Time.parse('20141105134054')

下記のように結果を返してくれます。素敵です。

2014-11-05 13:40:54 +0900

ただし、これは日本語が入っていないようなパターンで通用します。

日本語が入っている場合、例えば

2014年 12月 24日 1:20:30

のような物に関しては、Time.strptime を使います。

Time.strptime('2014年 12月 24日 1:20:30', '%Y年 %m月 %d日 %H:%M:%S')

個人的には、Time.strptimeの方が、自分の意思で変換している気分になるので
安心感がある気がしています。

2014年12月19日金曜日

Mac OSXにredisをインストールして、少し触ったメモ

Mac OSXにredisをインストールして、少し触った時のメモです。

redis公式サイト
redisドキュメント日本語訳

redisのインストール

HomebrewでRedisをインストール

インストール

brew update
brew install redis

 確認

下記を実行してversion情報が帰ってく来るか確認

redis-server --version

結果のサンプル

Redis server v=2.8.18 sha=00000000:0 malloc=libc bits=64 build=9addc0f74106cfbc

redisの起動

redis-server /usr/local/etc/redis.conf

redisの接続

redis-cli

redisの停止

redis-cliでCtrl + C とか shutdouwとか

値の設定

設定

set count 12

取得

get count
12

寿命の設定

10秒間countを保持する。

expire count 10

寿命の確認

ttl count

EC2インスタンスからAMIを作成する

AWSでマシンイメージを生成する方法です。
簡単に作成できます。
サーバーのコピーやバックアップが簡単に行えます。

以下簡単ですが、作業の手順です。

AMIの作成

AMIを作成するEC2のインスタンスを選択して

[Action] > [Image] > [Create Image]

Create Imageダイアログ

下記の各項目を設定して、[Create Image]ボタンをクリック

Create Image

マシンのイメージ名 必須項目です。

以下のようにサーバー名と日付で主に名前を付けています。

sever-name_yyyy-mm-dd

Image description

マシンイメージの説明。任意項目です。

No reboot

サーバーを再起動させてたくない場合は、チェックを入れる。
チェックを入れないとリブートしてくれます。こちらの方がきれいにイメージがとれそうな気がします。

定期的なバックアップ用でAMIを作成する時などには、サーバーを動かしたまま、No rebootにチェックを入れて作成するには有効だと思います。
ただし、データが消えたりする事例もあるようなので、要注意です。
Qiita - No RebootでAMIを作成したらファイルが消えたりした

Instance Volumes

イメージ生成に含めるEBSを選択。

状況確認

AMIsから状況の作成状況の確認ができます。

statusがpendingからavailableに変わったら完成です。

2014年12月10日水曜日

Railsでdatetimes型のvalidatetionをvalidates_timelinessを使ってする方法

Railsでdates や times, datetimesのバリデーションをするメソッドが標準で用意されていないので、下記のGemを導入して対応しました。

その時の、手順メモです。

GitHub adzap/validates_timeliness

インストール

以下をGemfileに追記して、bundle install を実行する。

# Datetime型 validates
# https://github.com/adzap/validates_timeliness/
gem 'validates_timeliness', '~> 3.0'

gemのinstallが終わったら、下記を実行して設定ファイルを生成する。

rails generate validates_timeliness:install

上記を実行すると、下記のファイルが生成される。

create  config/initializers/validates_timeliness.rb
create  config/locales/validates_timeliness.en.yml

実装

# フォーマット確認
validates_datetime :occurred_at

# 18歳以上の確認
validates_date :date_of_birth, :before => lambda { 18.years.ago },
                               :before_message => "must be at least 18 years old"

# 開始日 < 終了日の確認
validates_datetime :finish_time, :after => :start_time # Method symbol

# 今日以降の日付かの確認
# :todayは、config/initializers/validates_timeliness.rbで設定可能。
validates_date :booked_at, :on => :create, :on_or_after => :today 

# AM 9:00~PM5:00の間の確認
validates_time :booked_at, :between => ['9:00am', '5:00pm']
# 同じくAM 9:00~PM5:00の間の確認
validates_time :booked_at, :between => '9:00am'..'5:00pm'

# 確認した時間によってメッセージを切り替える。
validates_time :breakfast_time, :on_or_after => '6:00am',
                                :on_or_after_message => 'must be after opening time',
                                :before => :lunchtime,
                                :before_message => 'must be before lunch time'

config/initializers/validates_timeliness.rb

:nowや:today を使用する場合、下記のコメントアウトを外す。

config.restriction_shorthand_symbols.update(
  :now   => lambda { Time.current },
  :today => lambda { Date.current }
)

config/locales/validates_timeliness.[en|ja].yml

バリデーションのメッセーを日本語に変更したい場合は、config/locales/validates_timeliness.ja.ymlファイルを作成して編集する。

ファイルのなかみのサンプル

ja:
  errors:
    messages:
      invalid_date: "は、日付のフォーマットが間違っています"
      invalid_time: "は、時間のフォーマットが間違っています"
      invalid_datetime: "は、日時のフォーマットが間違っています"
      is_at: "は、%{restriction} を指定してください"
      before: "は、%{restriction} より小さい日時を指定してください"
      on_or_before: "は、%{restriction} 以前の日時を指定してください"
      after: "は、%{restriction} より大きい日時を指定してください"
      on_or_after: "は、%{restriction} 以降の日時を指定してください"
  validates_timeliness:
    error_value_formats:
      date: '%Y-%m-%d'
      time: '%H:%M:%S'
      datetime: '%Y-%m-%d %H:%M:%S'

2014年12月5日金曜日

Railsでファビコンを設定する

よくブラウザのアドレスバーの横やブックマークした時に表示される画像を作って登録しましょうという話です。
主な手順としては、
1. ファビコンの作成
2. ファビコンの登録
です。
それぞれ、下記に説明していきます。

ファビコンの作成

今回ファビコン用の元画像としてこれを使います。
enter image description here
そして、この画像をファビコン用に変換する必要があるので、
下記のサイトでファビコン用の画像に変換してもらいます。
http://favicon.qfor.info/c/
使い方は、画像を選択して、アイコン作成ボタンをクリックすればすぐに作成されます。
enter image description here
正方形ではないので、こんな感じで、ちょん切られて作成されます。

ファビコンの登録

今回は、Railsでの登録なので favicon_link_tagメソッド を使います。
/layouts/application.html.erbに下記を追記します。
<%= favicon_link_tag %>
この設定を行った場合、/favicon.ico を見にいってくれるので。
作成したアイコンのファイル名を favicon.icoにしてpublicフォルダ配下に配置すれば完成です。

2014年12月4日木曜日

NginxにBasic認証を設定する

nginx.confの設定

nginx.confに以下を追加
server {
    listen       80;
    server_name  www.sample.com;

    ## ここから 追加
    auth_basic "please login test";
    auth_basic_user_file "/etc/nginx/authfiles/.basicauthpasswd";
    ## ここまで 追加
    ・・・・

パスワードファイルの作成

パスワードの作成には、htpasswd コマンドを使用します。

新規に作成する場合

以下を実行して、作成されたファイル(.basicauthpasswd)を
/etc/nginx/authfiles/配下に設置します。
htpasswd -bc .basicauthpasswd testuser testpassword

複数ユーザーを追加する場合

htpasswd -bn testuser2 testpassword2
とすると、下記のような結果が帰ってくるので、
これを、.basicauthpasswdファイル内に追加で記述すればOKです。
testuser2:$apr1$inx7Pllo$fqPEAt0uwgBxwxGe5/35v0

htpasswd

呼び出しは下記の通りです。
htpasswd -b[cmdpsD] passwordfile username password

htpasswdのオプション

オプション 説明
-c 新しいパスワードファイルを作成します。もし、同名のパスワードファイルがすでに存在する場合は、既存の内容が削除されます。
-n どのような結果になるかのみを標準出力して終了します。パスワードファイルを変更しません(テスト実行用)。
-m パスワードをファイルに書き込む際、MD5 でハッシュします。
-d パスワードをファイルに書き込む際、CRYPT でハッシュします(デフォルト)。
-p パスワードをファイルに書き込む際、ハッシュしないで、プレーンなテキストのまま書き込みます。
-s パスワードをファイルに書き込む際、SHA でハッシュします。
-b パスワードを、対話式入力ではなくて、コマンドライン引数として指定できるようにします。

Nginxをリロード

/etc/init.d/nginx configtest
を実行して、以下のようにOKであれば
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
下記を実行。
/etc/init.d/nginx reload

statistics