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するとか書けば良い。 そういう意味では
- 一台のアプリケーションサーバーならgit pull
- 二台以上ならcapistranoを起動する
とかの選択肢になると思う。
あ、それとリクエストは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でモデルを作成すると自動的に出来上がる。