djangoのチュートリアル通りやってたらError: No module named pollsと出た

djangoを触ってみようと思って下記のサイト道りやってたら

http://www.djangoproject.jp/doc/ja/1.0/intro/tutorial01.html#intro-tutorial01

モデルを有効にする

python manage.py sql polls

Error: No module named polls

ってエラーが出る。。。 結論は

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'mysite.polls'
)

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'polls'
)

とする。

チュートリアルはコピペでも動くようにしておいて欲しいな。。。

capistranoのroleを動的に生成する

あんまり難しい話じゃなくて。

配列で受け取った値をどうやってroleにセットするのか解らなくてハマってた。

普通に書くとこうなるわけなんだが。

role :web, "hoge.jp", "foo.jp"

何かしらのwrapperを書いていて動的にroleを設定したい事が有ると思う。 こんな感じでOKかと思ってたらエラーになる。

# 配列
target_server = target_server.join(",")
role :web, target_server

はまりにハマって。正解はこうだった。 ブロックで書くみたい。

role :web do
  target_servers.each {|target|}
end

元ブログの情報によると2.2.0以上らしい。

ふー。。。ハマった。

githubへpushした時にawsからソースを取得する

AWSじゃなくても良いんですけどね。

githubにはservicehookというgitリポジトリのhooksみたいな機能がある。

リポジトリの画面からSettings(レンチのアイコン)→ServiceHooks→WebHook URLs の順序で辿って URLという欄に通知させたいサーバーのurlを記載する。

githubにpushすると、このurlにjson形式でpushされた情報(timestampとかheadのsha1値とか色々)が飛んで来る。

このjsonをパースするなり、リクエストが有ったから適当にpullするとか書けば良い。 そういう意味では

とかの選択肢になると思う。

あ、それとリクエストはhttpなのでwebサーバーが必要です。

sinatraで書くとこんな感じ。 リクエストはpayloadというパラメータに入って来るらしい。

#!/usr/bin/ruby

require 'rubygems'
require 'sinatra'
require 'json'
require 'sinatra/reloader'
require 'logger'

# 何かログ書きたかったら
Log = Logger.new('std.log')

post '/' do
        # 何か特定の動作させたいなら下記の値からsha1取るとかして動作させる
        # 今回はpullするだけ
        push = JSON.parse(params[:payload])
        # ログ
        Log.info(p(result))
        `cd /gitdir && git pull origin`
end

結構便利。

ruby gemをバージョンアップ, ダウンさせたい

バージョンダウンさせる

一旦アンインストールする

gem uninstall -v 2.0.3 rubygems-update

好きなバージョンを入れる

gem install -v 2.0.2 rubygems-update

バージョンアップさせる

バージョンダウンさせた時と一部同じ方法で(インストールとバージョンアップが同じ)出来る

gem install -v 2.0.3 rubygems-update

RubyOnRailsでsqlを直接指定する

極力ActiveRecordの標準に沿って書きたいけど、 やっぱ初動からそこを全部覚えるのが学習コスト高いなー。

と思ったら

members = Member.find_by_sql(
["SELECT * from members WHERE name = ?", 'Taro'])

こんな風に書ける。

Railsでちょこちょこ触りそうな予想のファイル#1

config/routes.rb

 # root to: "コントローラ名:アクション名"でドキュメントルート
 root to: "top#index"
 # httpメソット名 "パス名" => "コントローラ名#アクション名", get,post両方の場合はmatchを使う, asでアプリケーションから値が取れる
get "about" => "top#about", as: "about"
# lesson/action => lesson/actionのようにコントローラ名とアクションが一致してたら get "lesson/action"と簡略化出来る
# lesson/
get "lesson/:action(/:name)" => "lesson"

membersというテーブルを作成するマイグレーションファイル

db/migrate/日付_create_members.rb

class CreateMembers < ActiveRecord::Migration
  def change
    create_table :members do |t|
            t.integer :number, null: false # 背番号
            t.string :name, null: false # ニックネーム
            t.string :full_name # 本名
            t.string :email # メールアドレス
            t.date :birthday # 生年月日
            t.integer :gendar, null: false, default: 0 # 性別(0:男, 1:女)
            t.boolean :administrator, null: false, default: false # 管理者フラグ
      t.timestamps
    end
  end
end

このファイルはrails generateでモデルを作成すると自動的に出来上がる。