2012年8月18日土曜日

Heroku に push したら、sqlite3 のエラーが発生

Heroku(www.heroku.com)に Rails アプリをプッシュした時に、
sqlite3 について、ExtensionBuildError が発生したのでその対処を記述します。

Heroku ではデータベースとして PostgreSQL を提供しており、
sqlite3 には対応していません。
このため、sqlite3 を除いて push します。

sqlite3 に関するエラーメッセージ
$ git push heroku master
  (中略)
  Installing sqlite3 (1.3.6) with native extensions
  Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
  /usr/local/bin/ruby extconf.rb
  checking for sqlite3.h... no
  sqlite3.h is missing. Try 'port install sqlite3 +universal'
  or 'yum install sqlite-devel' and check your shared library search path (the
  location where your sqlite3 shared library is located).
  (以下略)


Rails のアプリケーション ディレクトリにある、Gemfile を修正します。
Heroku では PostgreSQL のライブラリ pg を使い、sqlite3 は開発用に使用することにします。

group :production do
  gem 'pg'
end
group :development, :test do
  gem 'sqlite3'
  gem 'sqlite3-ruby', :require => 'sqlite3' ※ これはインストールしている場合に必要
end


この後、Git に Gemfile をコミットした後に、Heroku に push します。
$ git commit Gemfile -m <message>
$ git push heroku master

2012年5月2日水曜日

[Windowsコマンド] コマンドでユーザ入力を求める

Windows コマンドプロンプトで、ユーザ入力を求めるコマンドの一覧

・CHOICE コマンド

ユーザに選択を求める方法
入力結果は ERRORLEVEL 環境変数に選ばれたキーのインデックスが設定されます。

CHOICE /C YNC /M "Yes[Y], No[N], Cancel[C]"
ECHO %ERRORLEVEL%

・SET コマンド

ユーザに文字列を入力させる方法
P オプションを利用して、環境変数にユーザ入力テキストを設定します。

SET /P input1=
ECHO %input1%

・PAUSE コマンド

何の入力でも良いので、ユーザ入力があるまで待つ方法
入力内容は受け取れません。

[分類:逆引き コマンドプロンプト]

[Windowsコマンド] Windowsで、Shellコマンドを代用する


全く同じではないが、Shellと類似の処理を行うWindowsコマンドの一覧
(ただし cd などのコマンドは除く)

・cat ファイル名

TYPE ファイル名

・cut -d ' ' -f1 ファイル名

ファイルの各行で、スペース区切りの1列目のみを出力する方法は
FOR /F "tokens=1" %i IN (sample1.txt) DO @ECHO %i

・diff ファイル名1 ファイル名2

FC ファイル名1 ファイル名2

・> /dev/null (リダイレクト)

コマンドの標準出力を表示させない方法は
ECHO sample1 > NUL

・grep 文字列 ファイル名

FINDSTR 文字列 ファイル名
これは正規表現で検索することも可能
パイプ処理で渡されたテキストに対して検索することもできます。
DIR | FINDSTR "sample1"

・pwd

カレントディレクトリ
ECHO %CD%

・touch ファイル名

空のファイルを作成する方法は
TYPE NUL > ファイル名

・wc -l

ファイルの行数を出力する方法は
FIND /V /C  "" ファイル名

・which コマンド名

コマンドのパスを出力する方法は
WHERE コマンド名

[分類:逆引き コマンドプロンプト]

[Windowsコマンド] テキストファイルに行番号を振る方法

テキストファイルに行番号を振って、"標準出力"する方法です。

・空のファイルと FC で比較する

先に空のファイル(null.txt)を作って比較します。
TYPE NUL > %TEMP%\null.txt
FC /N sample1.txt %TEMP%\null.txt

でも出力結果に余分なものが多いのが難点

・FIND で行全てを出力する

FIND /V /N "" sample1.txt

FC よりはスッキリとした結果になる


思うような形式で出力したい場合は、ロジックでファイルに出力するしかなさそうだ。

[分類:逆引き コマンドプロンプト]

2012年5月1日火曜日

[Windowsコマンド] ファイルの内容を変数に代入する


ファイルのテキストを環境変数に代入する方法
1行コマンドでできる範囲で、いくつかのパターンを整理してみました。

・ファイルの1行目のテキストを代入する

これは最もシンプルです。

SET /P test1=<file1.txt

・ファイルの特定の行のテキストを代入する

例えば行に目印となるテキストを付ける場合。
'target1' という目印を付けた行のテキストを代入する。

FOR /F %i in ('FIND "target1" file1.txt') DO @SET test1=%i

・ファイルの最終行のテキストを代入する

ファイルの行数が分かっている場合は、行をスキップします。
行数が100ならば、99行をスキップすれば最終行となる。

FOR /F "skip=99" %i in (file1.txt) DO @SET test1=%i


※バッチ プログラムなどでは、FORコマンドの %i は %%i を使用します。

[分類:逆引き コマンドプロンプト]

2012年4月8日日曜日

Twitter API が行うHTTP通信をモニタリングする

Twitter API の REST API や Search API が行うHTTP通信を確認したい場合は、ブラウザを利用すれば、リクエストのURLとレスポンス(json,xml,rss,atom)が確認できます。

ただし開発言語(PHP,Ruby,Java等)のTwitter API ライブラリを利用した通信の場合は、HTTP通信がラッピングされており通信の中を確認することができません。


WebサービスAPIの通信をモニターするツールを使う方法について

・Eclipse IDE の TCP/IPモニター
※Eclipse WTP(Web Tools Platform) に含まれている
これはプロキシサーバとして動作します、インターネット接続がTCP/IPモニターを経由する設定にできればモニターできます。Twitter API ライブラリの通信がプロキシを経由しない限り通信をモニターできません。
問題は、デフォルト・検索・メディアのendpoint となるURL(https://api.twitter.com など)ごとに設定が必要であるのと、設定毎にポート番号をユニークにする必要があること、HTTPS の設定が選べないこと。

・Fiddler2
http://www.fiddler2.com/fiddler2/
これも同様にプロキシサーバとして動作します。Fiddler2 が起動すると自動的に Windows インターネットオプションのプロキシ設定を変更するので、ブラウザでのインターネット接続はモニターします。
Twitter API ライブラリの通信がプロキシ設定を利用しないとモニターできません。

Ruby の Twitter API でプロキシを経由するには、Twitter.configure にプロキシ情報を設定します。
(例)
  Twitter.configure do |config|
    config.proxy = 'http://localhost:8888'
  end


Fiddler2 では、ポート番号は 8888 を使っています。HTTPS の場合は暗号化されておりますが、decodeする機能もありました。

・Microsoft ネットワーク モニター 3
http://support.microsoft.com/kb/933741/ja
これはネットワークの様々なプロトコルをモニターできるので、Twitter API ライブラリの通信もモニターできます。
パケットを監視するツールなので、HTTPリクエスト・レスポンスの中身はこのままでは分からない。HTTP の場合は Twitter API ライブラリが作成したHTTPリクエストのURLだけはこれで分かるので、URLのレスポンスをブラウザで確認すれば目的は満たせるはず。(面倒ですね) HTTPS の場合は暗号化されているのでURLも解読できません。

2012年4月2日月曜日

Railsで<head>タグ内の要素を変更する

Ruby on Railsで作成するHTML View(*.html.erbファイル)には、デフォルトでは<body>タグ内のコードのみを実装します。もし<head>タグで不要なscriptを削除したい場合などは、テンプレートファイルを変更します。
 デフォルトのテンプレートファイルの場所
 ./app/views/layouts/application.html.erb


cssやscriptを追加したい場合は、Asset Tag Helpers を使います。
http://guides.rubyonrails.org/layouts_and_rendering.html#asset-tag-helpers
 (例)cssとscriptを利用する場合
 <%= stylesheet_link_tag    "application" %>
 <%= javascript_include_tag "application" %>


コントローラ毎に異なったテンプレートファイルを利用したい場合は、コントローラに対応するビューのディレクトリ名と同じ名前でテンプレートファイルを作成します
 (例)Sample1コントローラの場合
 ./app/views/layouts/sample1.html.erb(テンプレートファイル)
 ./app/views/sample1/test1.html.erb(ビュー)