2012年5月19日土曜日

heroku上のpython flaskアプリをNew Relicで監視する

基本ここに書いてある通りでできるけど、いちおうまとめ。
https://newrelic.com/docs/python/python-agent-and-heroku


(1)new_relicをインストールする
ローカル環境にいちおういれる
$ pip install newrelic

heroku上の環境にいれるためにrequirements.txtに以下を追記
newrelic

commitしてherokuにアップする
$ git add requirements.txt
$ git commit -m "hogehoge"
$ git push heroku master


(2)herokuのNEW_RELICアドオンを追加する
$ heroku addons:add newrelic:standard

これをやるだけでnew relic上に自動的にアカウント発行される模様。
ほんと便利。

(3)ちゃんと入ったか確認する
$ heroku run env | grep NEW_RELIC
これで、newrelicのアカウント情報が表示されればOK

テストスクリプトを流す
$ heroku run newrelic-admin validate-config - stdout
*stdoutのハイフンの前にスペースがいるから注意

流したらherokuのWeb画面にログインして
自分のアプリケーションのAddonからNEWRelicを選ぶと
NewRelicの管理画面がでる。
Python Agent Test というのが出てればOK。だと思う。

(4)自分のアプリの監視をする
procfileを編集する。
gunicornを使ってる場合は以下のように書き換えるだけでOK

(変更前)web: gunicorn -b 0.0.0.0:$PORT hogeApp:app
(変更後)web: newrelic-admin run-program gunicorn -b 0.0.0.0:$PORT hogeApp:app

(5)procfileをherokuにアップする
git でpush

おわり









Ubuntu10.04にHerokuコマンドをいれる

Ruby環境をRVMでセットアップした後にいれる

●RVMインストール
$ bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)

●.bashrcに以下を追記
[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"

●.bashrc反映
$  source $HOME/.bashrc

●RVMの依存パッケージを確認し、足りないものがあればいれる
$ rvm list

●今回はpatchが無かったのでPacthだけいれた
$ sudo aptitude install patch

●ruby1.9.2を入れる
$ rvm install 1.9.2 --with-iconv-dir=$HOME/.rvm

●入れたRubyをデフォルトで使うのにする
$ rvm use ruby-1.9.2-p320 --default

●このRuby用のsetつくる
$ rvm --create 1.9.2@myset


●herokuインストール$ gem install heroku --no-ri --no-rdoc

ここまでで基本的には使えるようになる。
が、これだとコマンドライン使えない。たとえばlogsすると

$ heroku logs
こんなエラーがでる
$HOME/.rvm/rubies/ruby-1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': no such file to load -- readline (LoadError)


ので、もう少し作業がいる。

●インストールした場所のreadlineに移動
cd $HOME/.rvm/src/ruby-1.9.2-p320/ext/readline/

●チェック
$ ruby extconf.rb
checking for tgetnum() in -lncurses... no
checking for tgetnum() in -ltermcap... no
checking for tgetnum() in -lcurses... no
checking for readline/readline.h... no
checking for editline/readline.h... no


ということで上のを全部入れるために
$ sudo aptitude install libncurses5-dev libreadline5-dev

●で作りなおし。。
make
make install

●GEMSETも作りなおし
$ rvm --create 1.9.2@myset
$ gem install heroku --no-ri --no-rdoc



これでHerokuコマンドがちゃんと使える






2012年3月24日土曜日

macOSX Lion にPostgrewSQLをいれる

PostgreSQLインストール
homebrewからインストールする

brew install postgresql


curl http://nextmarvel.net/blog/downloads/fixBrewLionPostgres.sh | sh
*http://nextmarvel.net/blog/2011/09/brew-install-postgresql-on-os-x-lion/
*以下の.bashrcいじるのでもいいかも
*http://blog.k-jee.com/2012/01/mac-os-x-lionhomebrewpostgresql.html

DB初期化
initdb /usr/local/var/postgres

サーバーの起動と停止
pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
pg_ctl -D /usr/local/var/postgres stop -s -m fast


PHPPgAdminのインストール
http://www.pgadmin.org/download/macosx.php

postgresユーザーの作成
createuser <ユーザ名>
http://www.tencs.net/tech/tips/postgresql_createuser.html

.sqlファイルからのデータインポート

psql -U postgres -f XXX.sql


参考)
http://d.hatena.ne.jp/noodles_mtb/20110805/1312509838
http://blog.k-jee.com/2012/01/mac-os-x-lionhomebrewpostgresql.html
http://nextmarvel.net/blog/2011/09/brew-install-postgresql-on-os-x-lion/

mac OSX Lion でherokuが使えるようにする

rubyの複数バージョンをいれるために rvmをいれる
bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)

.bashrcに追記
    [[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"
.bashrcで反映
source .bashrc

rvm install 1.9.2 --with-gcc=clang
*なんかエラーはいたけど無視

rvm use 1.9.2 --default

rvm gemset作成
rvm --create 1.9.2@hogehoge

herokuをいれる
gem install heroku --no-ri --no-rdoc


macOSX Lionにpythonをいれてpythonbrewで開発環境つくる

パッケージインストールはmacportではなく、homebrewを使う

homebrewのインストール
/usr/bin/ruby -e "$(/usr/bin/curl -fsSL https://raw.github.com/mxcl/homebrew/master/Library/Contributions/install_homebrew.rb)"

pythonbrewのインストール

curl -kL http://xrl.us/pythonbrewinstall | bash
.bashrcに追記
vi $HOME/.bashrc
    source /Users/hoge/.pythonbrew/etc/bashrc
source .bashrc

python2.7.2, 3.2のインストール
pybrew install -f 2.7.2
*testでこけるので-fでオプションで強制的にいれる

使いたいバージョンのpythonに変更
$ pybrew switch 2.7.2
*バージョンだけ指定すれば変わる

pybrewのvenvを使って仮想環境構築
$ pybrew venv create hoge
$ pybrew venv list -a
$ pybrew venv use hoge
$ pybrew venv delete hoge

pipも同時に入るので仮想環境をactiveにした状態で
あとはpipで好きなものをいれる


VirtualEnvじゃなくて、pythonbrewのvenv使う方がよいから消した
pipのインストール
sudo easy_install pip


virtualenv, virtualenwrapperのインストール
sudo pip install virtualenv
sudo pip install virtualenvwrapper
.bashrcを編集してvirtualenvを便利に


vi $HOME/.bashrc
以下を追記
    ## Python virtualenvwrapper
    export WORKON_HOME=$HOME/.virtualenvs

    if [ -f /usr/local/bin/virtualenvwrapper.sh ]; then
      source /usr/local/bin/virtualenvwrapper.sh
    fi

    ## Python pip -> virtualenv only
    export PIP_REQUIRE_VIRTUALENV=true
    export PIP_RESPECT_VIRTUALENV=true

Env環境保存用のディリレクトリを作成
mkdir $HOME/.virtualenvs

インストールしたpython(python2.7.2)を使ってenv環境を構築する
pythonのバージョンを切り替える
pythonbrew switch 2.7.2
環境をつくる
mkvirtualenv --no-site-package env






(参考)
http://d.hatena.ne.jp/mfks17/20111231/1325344431
http://www.ninxit.com/blog/2011/07/22/pythonbrew-python-2/



virtualenv環境にpsycopg2をインストールする



virtualEnv環境にいれようとするとエラーになるらしい


pip install psycopg2==2.4.2
Error: pg_config executable not found.




以下をいれてからならインストールできました
sudo apt-get install libpq-dev python-dev


pip install psycopg2
Successfully installed psycopg2

(参考)

ubuntu10.04にpostgreSQLとPHPPgAdminをいれる

■postgresqlのインストール
sudo apt-get install postgresql
sudo passwd postgres
su postgres
psql
postgres=# alter user postgres with password 'password';

(参考)
http://ubuntu-note.blog.so-net.ne.jp/2010-12-01

■phppgadminのインストール

sudo apt-get install apache2

sudo /etc/init.d/apache restart
なんかapache2がはいってなかったので入れた

sudo apt-get install phppgadmin
phppgadminのインストール

以下は細かい設定

/etc/phppgadmin/apache.conf でApacheアクセスを制限。
(※基本必要ない。見れないならAllow ALL)

/etc/phppgadmin/config.inc.php で phpPgAdmin を設定。
※postgresを許可したりする
$conf['extra_login_security'] = false;

/etc/postgresql/8.4/main/pg_hba.conf  で PostgreSQL を設定。
※TCP(IP4アクセスをTrustする)



■PHPの設定
前に書いたコレ。

sudo vi /etc/php5/apache2/php.ini
で以下のMAX値を大きいファイルをあげれるように大き目の数値にしとく

php.iniの修正内容
post_max_size = 20M
upload_max_filesize = 18M

ubuntu10.04にherokuコマンドをいれて既存プロジェクトをgit cloneする


前提として、ubuntuにruby1.9.1とgem1.8が入ってる
※無理やりいれる方法ココ
http://fusigi-movement.blogspot.jp/2012/03/ubuntu1004ruby191gem.html

sudo gem install heroku
herokuをインストールする

sudo apt-get install libopenssl-ruby1.9.1
herokuと打つとlibopenssl-rubyが必要と言われたのでインストールする


heroku -v
2.22.0
できた


既存のプロジェクトのソースはherokuに上がっているので
キーを作成し、キーをherokuに登録し、herokuからファイルを取ってくる


mkdir $HOME/.ssh
cd $HOME/.ssh
ssh-keygen -t rsa
鍵を作成する

heroku keys:add
鍵をherokuに登録する

git clone git@heroku.com:hogehoge.git 
herokuからソースをクローンする
できた


ubuntu10.04にruby1.9.1をいれてgemを最新にする

herokuのコマンドをインストールしたいんだが、herokuのコマンドがrubyでできてることもあって、ローカル環境のrubyとかgemのバージョンが古いと色々と文句言われる。
ので、ubuntu10.04にruby1.9.1をいれて、さらにgemを最新にする。
rubyの知識が皆無な上に、そもそも俄かプログラマーなんで、かなりゴリっとやってる気がするので、もっとエレガントな方法が知りたい。。


■rubyのインストール
sudo aptitude install ruby
これで入るのはruby1.8なんでaptitude見つかる最新の1.9を入れる。

sudo aptitude install ruby-1.9.1
1.9のインストール


ruby -vすると当たり前だけど1.8見てるので、シンボリックで無理やり1.9.1を見るようにする。
このやり方が、きっと相当イマイチなんで、エレガントな方法知りたい。。


sudo mv /usr/bin/ruby /usr/bin/ruby.old
sudo ln -s /usr/bin/ruby1.9.1 /usr/bin/ruby

シンボリックリンクを貼る


ruby -v
ruby 1.9.1p378 (2010-01-10 revision 26273) [i486-linux]
できた


■gemのインストールと最新版
sudo apt-get install rubygems1.9.1
*aptitude でいれたら、gem 打つと1.8か1.9か分からないって怒られたのでapt-getで使うrubyを指定して入れる。

sudo gem install rubygems-update
gemを最新にするのをgemでいれる。なんか書いててイミフ。

sudo /var/lib/gems/1.9/bin/update_rubygems
最新版にアップデート

gem -v
1.8.21
できた

ubuntu10.04で複数バージョンのpythonを使う

ubuntu10.04はデフォルトのpythonはpython2.6なので
python2.7を追加でインストールする。
インストールしたpython2.7をベースにvirtualenvで開発環境を構築する。

(1)python2.7のインストール
参考ページほぼそのままで上手くいった

sudo apt-get install zlib1g-dev bzip2 libbz2-dev libreadline5-dev libjpeg62 libjpeg62-dev libfreetype6 libfreetype6-dev libsqlite3-0 libsqlite3-dev libgdbm3 libgdbm-dev libssl0.9.8 libssl-dev tk8.4-dev tk8.5-dev



wget http://www.python.org/ftp/python/2.7.2/Python-2.7.2.tgz
tar zxvf Python-2.7.2.tgz
cd Python-2.7.2/
./configure --prefix=/opt/python2.7 --with-threads --enable-shared
make
sudo make install
sudo strip /opt/python2.7/bin/python*
sudo ln -s /opt/python2.7/bin/python /usr/bin/python2.7
sudo vi /etc/ld.so.conf.d/opt-python2.7.conf

    # 下記を追記
    /opt/python2.7/lib
sudo /sbin/ldconfig




(参考)
http://fukuoka-py.g.hatena.ne.jp/uchikoshi22/20111211/1323556986



(2)virtualenv, virtualenvwrapperを使って環境つくる
sudo pip install virtualenv
sudo pip install virtualenvwrapper

VirtualEnvWrapperが簡単に叩けるように.bashrcを編集する
vi $HOME/.bashrc
    末尾にに以下を追記

    ## Python virtualenvwrapper
    export WORKON_HOME=$HOME/.virtualenvs
    if [ -f /usr/local/bin/virtualenvwrapper.sh ]; then
      source /usr/local/bin/virtualenvwrapper.sh
    fi
    ## Python pip -> virtualenv only
    export PIP_REQUIRE_VIRTUALENV=true
    export PIP_RESPECT_VIRTUALENV=true


python2.7で環境をつくる
mkdir $HOME/.virtualenvs
source $HOME/.bashrc
mkvirtualenv --python=/usr/bin/python2.7 --no-site-package env


環境に入る
work on env

環境から出る
deactivate

環境を削除する
rmvirturlenv env


引っ越し

posteraouがTwitterに買収されて先行き不安なんで、とりあえず引っ越し。
ところで、、googleはbloggerは続ける気あるんだろうか、不安。

元のブログはココ
http://suit-on-python.posterous.com/