Raspberry Pi 2 Model B に Selenium2 (WebDriver) をインストールしてブラウザを Python で headless に操作する方法

Raspberry Pi 2 Model B に Raspbian (Debian ベース) OS をインストールし、WebDriver (Selenium2) を Python で headless に動かして Web スクレイピングができるようになるまでに実施した手順メモ。なお OS インストールならびにインターネット環境への接続までは完了していることを前提とする。

環境情報

  • Raspberry Pi 2 Model B
  • Raspbian JESSIE (Debian 8.0, Linux Kernel 4.1.17)
  • Python 2.7.9
  • Python-pip 1.5.6-5
  • Iceweasel (Firefox ベースのブラウザ) 38.6.1
  • xvfb 1.17.2-1
  • Selenium (WebDriver) 2.52.0
  • PyVirtualDisplay 0.1.5

必要なパッケージのインストール

まず、Linux 上で必要となるパッケージをインストール。iceweasel は Firefox ベースのブラウザで、 xvfb は X Window System をエミュレートするソフトウェア (= 仮想ディスプレイ)で、今回のようにサーバ機や Raspberry Pi といった CLI 環境でヘッドレスにブラウザを起動するために利用。

$ sudo apt-get update
$ sudo apt-get install python python-dev python-pip iceweasel xvfb

次に、Python 上で必要となるライブラリをインストール。PyVirtualDisplay は xvfb を Python から利用するためのライブラリ。

$ sudo pip install selenium
$ sudo pip install pyvirtualdisplay
以下、確認用
$ pip freeze | egrep 'PyVirtualDisplay|selenium'
PyVirtualDisplay==0.1.5
selenium==2.52.0

確認コード

以下のコードを python の対話モード、もしくはスクリプトとして実行し、「Google」とタイトルが取得できれば OK。なお webdriver.Firefox() は処理が遅く、手元の Raspberry Pi では 30 秒近くかかった。

from pyvirtualdisplay import Display
from selenium import webdriver

display = Display(visible=0, size=(800, 600))
display.start()

driver = webdriver.Firefox()
driver.get("https://www.google.co.jp/")
print driver.title
driver.quit()

display.stop()

さらに詳しく

Selenium の公式サイト等に API や使い方の詳しい情報が掲載されている。

カテゴリー: Debian, Python, Raspberry Pi | Raspberry Pi 2 Model B に Selenium2 (WebDriver) をインストールしてブラウザを Python で headless に操作する方法 はコメントを受け付けていません。

Django プロジェクトを Eclipse で開発する方法

Python の Web アプリケーション・フレームワークである Django を使って開発する際、コード・エディタとして Eclipse を使いたい場合の手順を紹介。ざっくりいうと、コマンドでプロジェクトを作成した後、Eclipse でインポートする手順となる。

なお当方の開発環境は Mac だが、Eclipse の使える環境であれば同じ手順が利用可能。

開発環境

  • Eclipse 4.4.1
  • PyDev 3.9.1

Eclipse&PyDev インストール

ググると情報がたくさんあるため、詳細は割愛。Eclipse はこちらよりダウンロードし、解凍しておく。Package は好みだが、個人的には Eclipse を Python エディタとして使いたいだけなので最小構成の Eclipse SDK をこちらからダウンロードするのがオススメ。

Eclipse 起動後、初回はワークスペースの置き場所を聞かれるが、適当な場所を指定する。ソースコードの置き場所となるため、バックアップのとりやすいところを指定するのがオススメ。

起動した後、[Help] メニュー > [Eclipse Marketplace] より[Find:] と書かれた検索窓に「pydev」と入力し、検索。ヒットした PyDev プラグインを [Install] ボタン押下によりインストールを行う。[Next] や [Accept] といったボタンを駆使してインストールし、最後に Eclipse を再起動する。

再起動した後、[File] メニュー > [New] > [PyDev Project] と表示されていれば OK(表示を確認するだけで、今は選択しなくてよい)。

Django プロジェクトの作成

過去のこちらの投稿を参考に、Django プロジェクトを作成する。先ほど作成した Eclipse のワークスペース・フォルダ直下に作成すること。

Eclipse に Django プロジェクトを作成

手順としては新規にプロジェクトを作成しているが、実際には作成済みのプロジェクトフォルダがあるためインポート扱いとなる。

  1. Eclipse で [File] メニュー > [New] > [Other] > [PyDev] > [PyDev Django Project] を選択
  2. [Project name:] に作成した Django プロジェクト名を入力すると、画面上部の「Create a new Pydev Django Project.」が「Project location contains existing Python files. The created project will include them.」の表示に変わる。 [Next] > [Next] > [Finish] とボタンをクリック。
  3. PyDev Package Explorer ビュー等に作成した Django プロジェクトが表示されたら OK。

なお Django アプリケーションは、プロジェクトルートで右クリックし、[Debug As | Run As] > [PyDev: Django] を選択すると、開発機上で Web アプリケーションが起動し、http://127.0.0.1:8000/ でアクセスし動作確認が可能となる。

import で「Unresolved import: 」Error となったり、サーバ実行時に「ImportError: No module named  <パッケージ名>」Error となった場合の対処方法

virtualenv を使って pip install 等でライブラリを追加すると、Eclipse 上からはライブラリのパスが参照できないため、import できない旨のエラーが表示される場合がある。その場合の対処方法は以下の通り。

  1. プロジェクトルートで右クリックし、[Properties] を選択。
  2. [PyDev – PYTHONPATH] > [External Libraries] > [Add source folder] と選択する。
  3. virtualenv 上で追加したライブラリのパッケージディレクトリ (<Eclipse のワークスペース>/<project 名>/<virtualenv 環境名>/lib/python2.7/site-packages) を辿って [開く] を選択する。
  4. [OK] を選択してダイアログを閉じた後、import 関連のエラーが出なくなればOK。
カテゴリー: Django, Eclipse, Mac, Python | Django プロジェクトを Eclipse で開発する方法 はコメントを受け付けていません。

Ubuntu 14.04 で Chrome Remote Desktop をインストールする手順

ベータ版ということだが、Ubuntu に Chrome Remote Desktop をインストールし、インターネット経由でアクセスできるようになるまでの設定手順を以下にまとめた。GUI は Ubuntu 標準の Unity を使っている前提。

環境情報

  • Ubuntu Desktop 14.04.2 LTS
  • Google Chrome 42.0.2311.152 (64-bit)
  • chrome-remote-desktop 44.0.2403.44

インストール手順

Google Chrome を起動し、Chrome ウェブストア から「Chrome リモート デスクトップ」を検索し、「Chrome に追加」ボタンをクリックしてインストール。

Chrome の新規タブを作成し、アドレスバーに「chrome://apps/」と入力して Apps 一覧に「Chrome Remote Desktop」と表示されることを確認し、クリック。

「Chrome リモートデスクトップ」画面が表示されたことを確認し、画面右上の「?」アイコンをクリック。「Chrome リモートデスクトップ アプリ」画面が表示されることを確認。

「自分のパソコンにリモートからアクセスできるようにする」のセクションに記載されてるリンク「64 ビット Debian パッケージ」をクリックし、インストーラをダウンロードする。

ダウンロードした「chrome-remote-desktop_current_amd64.deb」をダブルクリックし、表示された Ubuntu Software Center から「install」を選択してインストール。途中、「The package is of bad quality」というダイアログが表示された際は「Ignore and install」ボタンをクリックし続行。「Installed」と表示されたら OK。

「Chrome リモートデスクトップ」をいったん終了し、再度起動する。起動後「マイパソコン」のセクションにインストールした PC のホスト名が表示されていることを確認。「リモート接続を有効にする」ボタンをクリックし、PIN (簡易的な数字のパスワード) を2回登録する。

他の PC やスマホから Chrome リモートデスクトップをインストール/起動し、アクセスしたいホスト名をクリックする。ダイアログが表示されたら登録した PIN を入力して「接続」をクリック。接続先のデスクトップ画面が表示されたら OK。

その他/困った時は…

上記設定でリモート接続が有効とならない場合は、[/tmp/chrome_remote_desktop_YYYYMMDD_hhmmss_<ランダムな文字列>] というログファイルを確認し、エラー内容等を確認する。設定を変更した場合は Chrome リモートデスクトップ画面で再度「リモート接続を有効にする」ボタンをクリックし、PIN 設定を行う。もしくは「Chrome リモートデスクトップ アプリ」画面のトラブルシューティングが参考になるかもしれない。

カテゴリー: Google Chrome Extensions, Linux, Ubuntu | Ubuntu 14.04 で Chrome Remote Desktop をインストールする手順 はコメントを受け付けていません。

Ubuntu 12.04 で Nested KVM 環境を構築するための設定手順

仮想マシン上で更に仮想マシンを動かすといった、いわゆる Nested VM を実現するための設定手順。今回は仮想化のハイパーバイザに Linux KVM を用いて Nested KVM 環境を構築した。

環境情報

環境確認・設定 (BIOS 編)

Ubuntu へログイン後、以下のコマンドを実行する。

$ cat /proc/cpuinfo | tr ' ' '\n' | sort | uniq | egrep "(vmx|svm)"
vmx (VT-x が有効な場合)

標準出力に何も表示されなかった場合は、以下のサイトを参考に、Intel VT-x (CPU の仮想化支援機能) を有効化する。有効化した際は、再起動後に上記コマンドを実行し、VT-x が有効となっていれば OK。

22.9. BIOS で Intel VT-x と AMD-V の仮想化ハードウェア拡張を有効にする
https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Virtualization_Administration_Guide/sect-Virtualization-Troubleshooting-Enabling_Intel_VT_and_AMD_V_virtualization_hardware_extensions_in_BIOS.html

KVM のインストール

KVM 環境に必要なパッケージをインストール。

$ sudo apt-get install kvm libvirt-bin bridge-utils cpu-checker

インストール後、以下のコマンドで確認。
(kvm-ok コマンドは cpu-checker パッケージに含まれている)

$ kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used

上記の通り出力されたら OK。

Nested KVM の設定

まず、Nested KVM の設定が有効となっているかを確認。

$ cat /sys/module/kvm_intel/parameters/nested
Y

Y と出力された場合は Nested KVM の設定が有効となっている。N と出力された場合は以下のコマンドを実行する。

$ sudo bash -c 'echo "options kvm-intel nested=1" > /etc/modprobe.d/kvm-intel.conf'

上記実行後、物理マシンを再起動する。ログイン後に再度 cat /sys/module/kvm_intel/parameters/nested して Y と出力されたら OK。

参考情報

Ubuntu 14.04でNested KVMを構築する – zzkater blog
http://d.hatena.ne.jp/zzkater/20141014/1413297533

カテゴリー: Linux, Ubuntu | Ubuntu 12.04 で Nested KVM 環境を構築するための設定手順 はコメントを受け付けていません。

Heroku で bash を使う&Python の urllib.urlretrieve() を使う (ファイルのダウンロード)

Heroku で Python を使ってファイルのダウンロードを実現する際の動作や注意点をまとめた。また動作を確認するにあたって、heroku の実行環境がどのような構成となっているか、bash を使って調べてみた。

なお Python でファイルをダウンロードする際は urllib モジュールの urlretrieve() 関数を使用することを想定する。また、手元の環境は heroku コマンドが利用可能な状態であることを前提とする (環境準備はこちらを参照)。

環境情報

  • Heroku (Ubuntu 14.04.1 LTS)
  • Python 2.7.9

Heroku 上 の bash を起動

手元の環境にてターミナルを起動し、以下のコマンドを実行する。bash のプロンプト「~ $ (heroku 実行ユーザのホームディレクトリにいる状態)」が表示されたら OK。

$ heroku run bash
Running `bash` attached to terminal... up, run.<PID>
~ $

この bash 実行環境がどのような設定/構成なのか確認してみる。

~ $ bash --version
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

~ $ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.1 LTS
Release: 14.04
Codename: trusty

~ $ pwd
/app

~ $ whoami
u<ランダムな数字5桁>

Heroku のアプリケーション実行環境が Ubuntu 14.04 で動作していることが分かる。

Heroku 上で Python インタプリタ (Interactive console) を起動する

引き続き、Heroku 上の bash で以下のコマンドを実行する。Python インタプリタのプロンプトである「>>>」が出力されたら OK。

~ $ python
Python 2.7.9 (default, Dec 11 2014, 17:18:51) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

引き続き、このインタプリタのカレントディレクトリを確認する。Python の os モジュールを import し、os.system() 関数の引数にコマンドを指定すると、Heroku の実行環境 (ここでは Ubuntu) にコマンドを渡すことができる。

>>> import os
>>> os.system('pwd')
/app
0
>>>

Heroku 上の Python でファイルのダウンロードを実行する

Heroku 上の Python インタプリタにて、python.org のトップページをダウンロードしてみる。

>>> import urllib
>>> url = 'http://python.org/'
>>> name, headers = urllib.urlretrieve(url)
>>> 
>>> print name
/tmp/tmp<ランダムな文字列>
>>> 
>>> print headers
Date: <ダウンロードした日時>
Server: nginx
Content-Type: text/html; charset=utf-8
X-Frame-Options: SAMEORIGIN
Content-Length: 46952
Accept-Ranges: bytes
Via: 1.1 varnish
Age: 3001
X-Served-By: cache-atl6235-ATL
X-Cache: HIT
X-Cache-Hits: 5
Vary: Cookie
Public-Key-Pins: (省略)
Strict-Transport-Security: max-age=63072000; includeSubDomains
Connection: close

>>> os.system('ls -alrt /tmp/')
total 56
drwxr-xr-x 15 root root 4096 Jan 14 09:04 ..
-rw------- 1 u<ランダムな数字5桁> <ランダムな数字5桁> 46952 Feb 21 14:24 tmp<ランダムな文字列>
drwx------ 2 u<ランダムな数字5桁> <ランダムな数字5桁> 4096 Feb 21 14:24 .
0
>>>

上記の通り、/tmp 配下に「tmp」から始まるランダムな文字列のファイル名でダウンロードできた。が、インタプリタを終了してみると・・・

>>> exit()
~ $ ls -alrt /tmp/
total 8
drwxr-xr-x 15 root root 4096 Jan 14 09:04 ..
drwx------ 2 u<ランダムな数字5桁> <ランダムな数字5桁> 4096 Feb 21 14:32 .
~ $

先ほど見えていたファイルが存在しない。Python のインタプリタを終了する際に、事後処理で消えた (消された) 可能性が考えられる。

対策

以下の通り、urlretrieve() 関数の第2引数にダウンロード時のファイル名を指定することでファイルが残ることを確認出来た。

~ $ python
Python 2.7.9 (default, Dec 11 2014, 17:18:51) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 
>>> import os
>>> import urllib
>>> url = 'http://python.org/'
>>> file = '/tmp/index.html'
>>> name, headers = urllib.urlretrieve(url, file)
>>> print name
/tmp/index.html
>>> 
>>> os.system('ls -alrt /tmp/')
total 56
drwxr-xr-x 15 root root 4096 Jan 14 09:04 ..
-rw------- 1 u<ランダムな数字5桁> <ランダムな数字5桁> 46952 Feb 21 16:25 index.html
drwx------ 2 u<ランダムな数字5桁> <ランダムな数字5桁> 4096 Feb 21 16:25 .
0
>>> exit()
~ $ 
~ $ ls -alrt /tmp/
total 56
drwxr-xr-x 15 root root 4096 Jan 14 09:04 ..
-rw------- 1 u<ランダムな数字5桁> <ランダムな数字5桁> 46952 Feb 21 16:25 index.html
drwx------ 2 u<ランダムな数字5桁> <ランダムな数字5桁> 4096 Feb 21 16:25 .
~ $

ただし、上記でダウンロードしたファイルも、いったん heroku 上の bash から exit するとファイルが削除されてしまうため、あくまで一時的な保存先として利用することとし、永続化する場合は DB やストレージサービスへ配置するといった恒久対策が必要と考える。

カテゴリー: Heroku, Python | Heroku で bash を使う&Python の urllib.urlretrieve() を使う (ファイルのダウンロード) はコメントを受け付けていません。

Python で URL 内のファイル名を取得するイディオム

Python 2.x で URL 内のファイル名を取得するイディオム。下記のサイトを参考に、少し拡張してみた。

ファン猛のブログ – PythonでURL文字列からファイル名を1行で取り出す
http://fantakeshi.blog50.fc2.com/blog-entry-32.html

リクエストパラメータが含まれている場合は、それを取り除くことも考慮。

>>> url = 'http://www.hoge.com/abc/cde/xyz.txt?foo=bar'
>>> print url.rsplit('/', 1)[1].split('?')[0]
xyz.txt
カテゴリー: Python | Python で URL 内のファイル名を取得するイディオム はコメントを受け付けていません。

Ubuntu 14.04 で Django アプリケーションを Heroku にデプロイする手順

Ubuntu 14.04 に Python の Web アプリケーション・フレームワークである Django の動作環境を構築し、PaaS である Heroku にデプロイする手順をまとめた。

基本的には、下記の流れに沿って進める。

Getting Started with Django on Heroku | Heroku Dev Center https://devcenter.heroku.com/articles/getting-started-with-django

なお Django の環境構築にあたっては、Python 実行環境の仮想化ツールである Virtualenv を利用する。仮想化することで環境構築をやりなおしたり、別の Python 環境を構築する際に Python ライブラリの依存関係 (主にバージョン関係) が上書きされて壊れることを防ぐ、といったメリットがある (Python 2.x と 3.x の実行環境を同居させる、といったことも可能)。

環境情報

  • Ubuntu Sever 14.04.1 LTS
  • Python 2.7.6
  • Virtualenv 1.11.4
  • pip 1.5.4
  • Django 1.7.4
  • Heroku Toolbelt 3.25.0

Heroku のユーザ登録

下記に従ってユーザ登録する。

Heroku | Sign up
https://signup.heroku.com/dc

事前準備

パッケージ情報を最新化しておく。

$ sudo apt-get update
$ sudo apt-get upgrade

Heroku にデプロイするためのツール Heroku Toolbelt をインストール。下記の通り、バージョン情報が出力されたら OK。

$ wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh

$ heroku version
heroku-toolbelt/3.25.0 (x86_64-linux) ruby/1.9.3
You have no installed plugins.

次に、Django の動作に必要となる、Python 関連のライブラリや、Heroku デプロイ時に必要となる PostgreSQL のライブラリ等をインストール。

$ sudo apt-get install python-pip python-virtualenv libpq-dev

$ pip --version
pip 1.5.4 from /usr/lib/python2.7/dist-packages (python 2.7)

Django 環境の構築

まずは Django アプリケーション開発管理用ディレクトリを作成し、移動する。

$ mkdir hellodjango && cd hellodjango

ここでは、「venv」という名前で仮想環境を作成する。venv ディレクトリが作成されていれば OK。

$ virtualenv venv

$ ls -l
total 4
drwxrwxr-x 6 ubuntu ubuntu 4096 Feb  8 20:42 venv

作成した venv 仮想環境を利用するため、アクティベートする。プロンプトの先頭に仮想化環境を意味する (venv) が出力されていれば OK。

$ source venv/bin/activate
(venv) $

続いて、Django と関連ライブラリ一式をインストールする。いろいろと出力されるが、最後に「Successfully installed」と表示されたら OK。念のため、pip list で Django 等がインストールされているか確認する。

(venv) $ pip install django-toolbelt

(venv) $ pip list
argparse (1.2.1)
dj-database-url (0.3.0)
dj-static (0.0.6)
Django (1.7.4)
django-toolbelt (0.0.1)
gunicorn (19.2.1)
pip (1.5.4)
psycopg2 (2.5.4)
setuptools (2.2)
static3 (0.5.1)
wsgiref (0.1.2)

次に、Django プロジェクトを作成。コマンドの最後のドット “.” も忘れずに含めること。hellodjango ディレクトリと manage.py が作成されていれば OK。

(venv) $ django-admin.py startproject hellodjango .

(venv) $ ls -l
total 12
drwxrwxr-x 2 ubuntu ubuntu 4096 Feb  8 21:04 hellodjango
-rwxrwxr-x 1 ubuntu ubuntu  254 Feb  8 21:04 manage.py
drwxrwxr-x 6 ubuntu ubuntu 4096 Feb  8 20:50 venv

続いて、Heroku の実行プロセスである Dynos に渡す実行パラメータを Procfile というテキストファイルに記述する。

(venv) $ echo 'web: gunicorn hellodjango.wsgi --log-file -' | tee Procfile
web: gunicorn hellodjango.wsgi --log-file -

ここで動作確認として、ローカルサーバを起動し Django アプリケーションにアクセスしてみる。foreman を実行すると、下記の通り HTTP プロトコルを 5000 番ポートで待ち受けしていることが分かる。ブラウザや curl 等で HTML が返却されることを確認できれば OK。動作確認後、Ctrl + c で停止する。

(venv) $ foreman start
21:19:03 web.1  | started with pid 18277
21:19:03 web.1  | [2015-02-08 21:19:03 +0000] [18277] [INFO] Starting gunicorn 19.2.1
21:19:03 web.1  | [2015-02-08 21:19:03 +0000] [18277] [INFO] Listening at: http://0.0.0.0:5000 (18277)
21:19:03 web.1  | [2015-02-08 21:19:03 +0000] [18277] [INFO] Using worker: sync
21:19:03 web.1  | [2015-02-08 21:19:03 +0000] [18284] [INFO] Booting worker with pid: 18284

(例) Ctrl + z でプロセス一時停止 & bg でバックグラウンド実行 & curl でアクセス

^Z
[1]+  Stopped                 foreman start

(venv) $ bg
[1]+ foreman start &

(venv) $ curl http://127.0.0.1:5000
(Django の生成した HTML が出力される)

(venv) $ fg
foreman start
(Ctrl + c でプロセス停止)
^C
21:30:43 web.1 | [2015-02-08 12:30:43 +0000] [18284] [INFO] Worker exiting (pid: 18284) 
SIGINT received 
21:30:43 system | sending SIGTERM to all processes 
21:30:43 web.1 | exited with code 0

Heroku へのデプロイ

作成した Django アプリケーションを Heroku へデプロイするには、git 経由でファイルをコミットすることになる。

まず、pip の依存関係を表す requirements.txt を作成する。Heroku はこのファイルを参照して、必要なライブラリとそのバージョンを準備する。

(venv) $ pip freeze > requirements.txt

次に、git にコミット不要なファイルやディレクトリを .gitignore ファイルに記載する。cat して3行出力されたら OK。

(venv) $ cat << EOF > .gitignore
> venv
> *.pyc
> staticfiles
> EOF

(venv) $ cat .gitignore
venv
*.pyc
staticfiles

続けて、ローカルに git リポジトリを作成する。

(venv) $ git config --global user.email "<メールアドレス>"
(venv) $ git config --global user.name "<ユーザ名>"
(venv) $ git init
(venv) $ git add .
(venv) $ git commit -m "my django app"

最後に、Heroku 上にアプリケーションを作成し、作成した Django アプリケーションをデプロイする。[app-name] にはユニークな名前を指定すること。他の人のアプリケーション名と重複すると「Name is already taken」と怒られる。[app-name] を指定しなかった場合は、ランダムな文字列でアプリケーション名が付けられる (後で変更も可能)。

git push heroku master を実行し、やや時間が経過して「remote: Verifying deploy… done.」と出力されたら OK。ブラウザを起動して「https://[app-name].herokuapp.com/」へアクセスし、「It worked!」と表示されたら OK。

(venv) $ heroku create [app-name]
Enter your Heroku credentials.
Email: (Heroku に登録したメールアドレスを入力)
Password (typing will be hidden): (Heroku に登録したパスワードを入力)
Creating [app-name]... done, stack is cedar-**
https://[app-name].herokuapp.com/ | https://git.heroku.com/[app-name].git
Git remote heroku added

(venv) $ git push heroku master

(以下のエラーが出た場合は、下記コマンド実行の後、再度 git push)
fatal: 'heroku' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

(venv) $ git remote add heroku git@heroku.com:[app-name].git

(venv) $ git push heroku master

サイトによっては heroku create 時に –stack cedar (あるいは -s cedar) オプションを指定せよ、とあるが、自動で最新の実行環境である cedar が選ばれた (requirement.txt を見て自動で判断した?)。

なお、virtualenv 環境から抜ける場合は、deactivate コマンドを実行する。プロンプトの (venv) 表記が無くなれば OK。ちなみに再度 virtualenv 環境に入る場合は、上述の activate を実行する。

(venv) $ deactivate
$

今回の手順で正しく構築できた場合のディレクトリ階層は下記の通りとなる。

.
├── .git
│   └── (git の構成ファイル/ディレクトリ群)
├── .gitignore
├── hellodjango
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── manage.py
├── Procfile
├── requirements.txt
└── venv
     ├── bin
     ├── include
     ├── lib
     └── local

その他、Heroku の便利コマンド

環境によって上記の通りうまくいかなかったときのために、いくつか便利な heroku コマンドを紹介する。

ヘルプを出力
$ heroku help

heroku のログを出力
$ heroku logs

dyno プロセスを出力
$ heroku ps

heroku プロセスを再起動
$ heroku restart

heroku 上で bash を起動
$ heroku run bash

アプリケーション名を変更
$ heroku apps:rename [new-app-name] --app [old-app-name]
カテゴリー: Django, Heroku, Linux, Python, Ubuntu | Ubuntu 14.04 で Django アプリケーションを Heroku にデプロイする手順 はコメントを受け付けていません。

Mac で git をインストール/更新する際の注意事項

Mac に git を install したり、また git を更新する際に注意することをまとめた。

環境情報

  • OS X 10.9.5
  • Homebrew 0.9.5

git のインストール

主に2通りの方法がある。個人的には Mac のパッケージ管理がまとめて出来て、かつバージョンの更新が早い Homebrew 方式を採用している。インストール方法はネット上にたくさん情報があるため、ここでは割愛。

  1. 公式サイトのインストーラを使ってインストール
  2. Homebrew を使ってインストール

ちなみに、上記 1. の方法でインストールした git は /usr/local/git/bin/ 配下に、2. では /usr/local/bin/ 配下にそれぞれインストールされる。ターミナルを起動し、以下のコマンドで確認。

$ git version
git version 2.3.0

$ which git
/usr/local/bin/git

git の更新 (バージョンアップ) 方法

公式サイトの git を使っている場合は、新しいバージョンのインストーラをダウンロードし、インストールすることでバージョンが更新される。Homebrew の場合は、以下のコマンドで更新。

$ brew upgrade git

$ git version
git version 2.3.0

インストール/更新した git のバージョンが期待結果と異なる場合の対処

git をインストール/更新した際に、バージョンが期待結果と異なる場合がある。自分の環境では git が 1.9.3 から更新できないという問題が発生した。

$ git version
git version 1.9.3 (Apple Git-50)

何者か調べてみる。

$ which git
/usr/bin/git

$ pkgutil --file-info /usr/bin/git
volume: /
path: /usr/bin/git

pkgid: com.apple.pkg.Essentials
pkg-version: 10.9.0.1.1.1306847324
install-time: 1384092348
uid: 0
gid: 0
mode: 755

ググってみると、Stack Overflow に下記情報があった。どうやら Xcode 4 をインストールすると、一緒に git がインストールされるらしい。

Does Xcode 4 install git? – Stack Overflow
http://stackoverflow.com/questions/5364340/does-xcode-4-install-git

環境変数 PATH の指定順序が問題らしいことがわかる。早速確認。

$ cat /etc/paths
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin

/usr/bin が先頭にあるため、その配下にある git が優先して実行されていたことが分かる (要は複数バージョンの git がインストールされた状態)。これを以下の通り修正。/usr/local/bin を先頭に移動する。

$ sudo vi /etc/paths
(パスワードを入力)

$ cat /etc/paths
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

 最後に環境変数を読み込み直して、期待した git が実行できていれば OK。

$ source /etc/profile

$ git version
git version 2.3.0

$ which git
/usr/local/bin/git
カテゴリー: Git, Mac, トラブルシューティング | Mac で git をインストール/更新する際の注意事項 はコメントを受け付けていません。

Ubuntu 14.04 に Android Studio をインストールする手順

12/9 に Google 社より Android Studio 1.0 がリリースされた。
今後は Android アプリケーション開発において、 Eclipse に代わるデファクト IDE となると予想されるため、インストール手順をまとめた。

  • Ubuntu Desktop 14.04.1 LTS 64bit
  • Android Studio 1.0
  • Oracle Java JDK 8

1. Android Studio のダウンロード

ダウンロードに時間がかかる (約 240 MB) ため、まず公式サイトより Android Studio をダウンロードする。

screenshot

2. JDK 8 のインストール

今回は OpenJDK ではなく、Oracle JDK を採用した。公式サイトには JDK 7 が必要と記載されているが、JDK 8 でも動作した。以下の通り PPA を追加し、パッケージをインストール。

$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer

インストール後、以下の通りバージョンが表示されたら OK。

$ java -version
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)

3. 必要パッケージのインストール

今回の実行環境は 64 bit OS だが、Android Studio はいくつか 32bit ライブラリを利用しているため、追加で下記パッケージをインストールする。

$ sudo apt-get install libc6-i386 lib32stdc++6 lib32z1

 4. Android Studio の実行

ダウンロードした zip ファイルを解凍し、Android Studio を起動する。
新規プロジェクトを作成し、エミュレータ等を利用してアプリケーションのビルド、実行ができれば OK。

$ unzip android-studio-ide-135.1629389-linux.zip
$ ./android-studio/bin/studio.sh

(おまけ) adb コマンドを使えるようにする

上記の手順でインストールはできたものの、Android 端末に接続するための adb コマンドが利用できなかったため、以下の通りパッケージをインストールしたところ、正常に動作した。

$ sudo apt-get install android-tools-adb
$ adb version
Android Debug Bridge version 1.0.31

 

 

カテゴリー: Android, Java, Ubuntu | Ubuntu 14.04 に Android Studio をインストールする手順 はコメントを受け付けていません。

Ubuntu 12.04 に Ansible をインストールする手順

Ubuntu 12.04 に構成管理ツールである Ansible (http://www.ansible.com/home) をインストールし、疎通確認するまでの手順メモ。公式ドキュメント (http://docs.ansible.com/intro_installation.html#latest-releases-via-apt-ubuntu) を主に参考としている。

Ansible をインストールするマシン (管理サーバと呼ぶ) 以外に別途、管理対象マシン (仮想マシンでも可) を用意しておくこと。

  • Ubuntu Server 12.04.5 LTS 64bit
  • Ansible 1.7.2

事前準備

まず管理サーバ (Control node) にて、python-software-properties パッケージがインストールされているか確認。

$ dpkg -l | grep python-software-properties

何も表示されない場合、以下の通りインストール。

$ sudo apt-get install python-software-properties
(前略)
The following NEW packages will be installed:
  python-pycurl python-software-properties unattended-upgrades
0 upgraded, 3 newly installed, 0 to remove and 13 not upgraded.
(後略)

もう一度 dpkg コマンドを実行し、インストールされたことを確認。

$ dpkg -l | grep python-software-properties
ii  python-software-properties       0.82.7.7                          manage the repositories that you install software from

ついでに依存パッケージも確認。おまけなので、実行しなくてもよい。

$ apt-cache depends python-software-properties
python-software-properties
  Depends: python2.7
  Depends: python
  Depends: python
  Depends: python-apt
  Depends: lsb-release
  Depends: python-gnupginterface
  Depends: unattended-upgrades
  Depends: iso-codes
  Depends: python-pycurl

Ansible のインストール

管理サーバに PPA (Personal Package Archive) リポジトリサイトを追加し Ansible をインストールする。

$ sudo apt-add-repository ppa:ansible/ansible
(Press [Enter] to continue ... と聞かれたら enter 押下)
$ sudo apt-get update
$ sudo apt-get install ansible
(前略)
The following NEW packages will be installed:
  ansible python-jinja2 python-markupsafe python-paramiko python-support python-yaml sshpass
The following packages will be upgraded:
  python-crypto
1 upgraded, 7 newly installed, 0 to remove and 13 not upgraded.
(後略)

インストール後の確認。

$ ansible --version
ansible 1.7.2
$ dpkg -l | grep ansible
ii  ansible                          1.7.2-1ppa~precise                A radically simple IT automation platform
$ apt-cache depends ansible
ansible
  Depends: python
  Depends: python-support
  Depends: python-jinja2
  Depends: python-yaml
  Depends: python-paramiko
  Depends: python-httplib2
  Depends: python-crypto
  Depends: sshpass

疎通確認

以下、管理サーバにて実施。カレントディレクトリにて hosts という名前のファイル (インベントリファイルと呼ぶ。Ansible はこのファイルに記載したマシンにしかアクセスできない) を作成する。

$ echo <管理対象マシンのIPアドレス> > hosts && cat ./hosts

上記で指定した <管理対象マシンのIPアドレス> が出力されたらOK。

次に、Ansible を使って ping 疎通してみる。ここでは SSH パスワード認証するためのオプション -k を指定している。

$ ansible -i ./hosts <管理対象マシンのIPアドレス> -u <管理対象マシンのユーザ> -k -m ping
SSH password:
(<管理対象マシンのユーザ> のパスワードを入力し、enter 押下)
<管理対象マシンのIPアドレス> | success >> {
    "changed": false,
    "ping": "pong"
}

上記の様な応答が返ってくればOK。うまくいかない場合は -vvvv オプションを付けて再度実行すると、原因が何か分かるかもしれない。

カテゴリー: Ansible, Ubuntu | Ubuntu 12.04 に Ansible をインストールする手順 はコメントを受け付けていません。