Django の syncdb を expect で自動化しようとしたのですが、何故か admin user が作成されません。



何か、思い当たる原因がありましたら、ご教示いただけないでしょうか?なお OS は Mac になります。

---
mysyncdb.sh
---
rm db.sqlite3
python manage.py sql yourappname
expect -c "
spawn python manage.py syncdb
expect Would; send \"yes\r\"
expect Username; send \"yourusername\r\"
expect Email; send \"\r\"
expect Password; send \"yourpassword\r\"
expect Password; send \"yourpassword\r\"
"
echo ""
 

---
実行結果、確認コマンド
---
$ mysyncdb.sh
...
$ # エラー無く完了する。
$ # けれども、DBを確認してみると ...
$ sqlite3 db.sqlite3
sqlite> select * from yourapp_user
sqlite> ; 何故か作成したはずの yourusername アカウントが存在しない。


どうぞ、よろしくお願いいたします。

回答の条件
  • 1人1回まで
  • 13歳以上
  • 登録:2014/07/16 02:28:05
  • 終了:2014/07/16 17:44:43
id:domodomodomo

パスワードは手入力になりますが、いまいまはヒアドキュメントを使って逃げております。

rm db.sqlite3
python manage.py sql yourappname
python manage.py syncdb <<EOF
yes
yourusername

<<

ベストアンサー

id:snow0214 No.1

snow0214回答回数470ベストアンサー獲得回数1162014/07/16 13:06:13

ポイント200pt

expectのスクリプトを下のようにしてみてください。

expect {
spawn python manage.py syncdb
expect \"Would\" {
  send \"yes\r\"
}
expect \"Username\"
  send \"yourusername\r\"
}
expect \"Email\"
  send \"\r\"
}
expect \"Password\" {
  send \"yourpassword\r\"
}
expect \"Password\" {
  send \"yourpassword\r\"
}
id:domodomodomo

ご教示いただいた内容でも、改善することができなかたのですが、
幸い、下記の通り、改善策が見つかりました。
貴重なお時間をいただき、誠にありがとうございました。

2014/07/16 17:44:29

その他の回答(0件)

id:domodomodomo

質問文を編集しました。詳細はこちら

id:snow0214 No.1

snow0214回答回数470ベストアンサー獲得回数1162014/07/16 13:06:13ここでベストアンサー

ポイント200pt

expectのスクリプトを下のようにしてみてください。

expect {
spawn python manage.py syncdb
expect \"Would\" {
  send \"yes\r\"
}
expect \"Username\"
  send \"yourusername\r\"
}
expect \"Email\"
  send \"\r\"
}
expect \"Password\" {
  send \"yourpassword\r\"
}
expect \"Password\" {
  send \"yourpassword\r\"
}
id:domodomodomo

ご教示いただいた内容でも、改善することができなかたのですが、
幸い、下記の通り、改善策が見つかりました。
貴重なお時間をいただき、誠にありがとうございました。

2014/07/16 17:44:29
id:domodomodomo

答えは interact を追加し、標準入力に戻することでした。

原因は、上記のスクリプトでは yourpassword を2回打った段階で、
python manage.py syncdb コマンドが
エラーも出力せずに強制終了していたようでした。

正しいスクリプトは次のようになります。

rm db.sqlite3
python manage.py sql yourappname
expect -c "
spawn python manage.py syncdb
expect Would; send \"yes\r\"
expect Username; send \"yourusername\r\"
expect Email; send \"\r\"
expect Password; send \"yourpassword\r\"
expect Password; send \"yourpassword\r\"
interact
"
echo ""

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません