Djangoでデータ登録しようとした時character with byte sequence 0xe3 0x83 0x95 in encoding "UTF8" has no equivalent in encoding "LATIN1"なエラーが出ちゃった時
Djangoで日本語のデータを登録しようとした時、以下のようなエラーが出ました。
character with byte sequence 0xe3 0x83 0x95 in encoding "UTF8" has no equivalent in encoding "LATIN1"
これは自分がPostgreSQL使っていて起きた問題です。
PostgreSQLに原因があります。
まぁ、簡単に言うと現在使っている文字のエンコードが違うよーってはなし。
なのでDBを作成するときはエンコードをUTF8で作成しましょう。
PostgreSQLでencordingを変更を変えてDBを作成しようとしたけど"createdb: database creation failed: ERROR: encoding EUC_JP does not match locale en_US.UTF-8"なエラーが出ちゃった時
createdb -T template0 -E EUC_JP --locale=C dbname
なふうに書いてやれば出来ました。
参考
railsのsaveとsave!の違い (active record)
railsを使っていてDBに登録するときに
saveを使っているでしょうか?
それとも
save!を使っているでしょうか?
この違いって結構大きいんですよね。
ですので使い分けを推奨します。
ではどのように使い分けるかというと、データを新しく取り込むときに
取り込めなかったときにエラーにするかしないかを選ぶということです。
・saveは、保存できない場合 false。
・save!は、保存できない場合 例外ActiveRecord::RecordInvalid
何か取り込めなかったときにログとか残しておきたかったらsave!とかのほうがいいかもしれません。
特にログは残さないし、true falseの判断だけでいいやってかたはsaveでいいかもしれません。
Djangoとnginxでstaticファイルが当たらないとき
普段nginxの設定をしない自分からすればめっちゃ詰まりました。。。
nginx,uwsgi,djangoを使ってサイトを公開しようとしました。
すると、おっ独自ドメインでサイト見れるぞ!っとここまでは良かったんですが、
あれcss当たってない。。。。
と言うかstaticファイル読み込んでなくね。。。
となったわけです。
chromeの開発者ツールで見てみると
403エラーと出ているわけです。
ふむふむ、だいたいこれは権限関係のことだなっと。
まぁ、本当はというか、絶対良くないけど、アプリ配下の権限777のしちゃえば良くない?と思って変えたわけです。
しかし、直らない。。。
そして
ps aux | grep nginx
でようやく真相をするわけです。
あっ、nginx起動しているユーザー "www-data" みたいなやつだ。
自分のアプリのユーザーと違う。。。
まぁ、そこでnginxの起動ユーザー名を変えたら直りました。
つまりは
myprojectのユーザーが hogeなら
/etc/nginx/nginx.confの
一番上らへんにある
user www-data;
を
user hoge;
に変えてあげんと駄目だったんです。
django製CMS mezzanineをインストールしてみよう
みなさんはCMSと聞いて何を思いつくでしょうか?
そうです、wordpressですね。
テンプレートの種類もプラグインも豊富ですし簡単にブログやサイト構築ができて非常に便利です。
でも、phpですよ!php!
えぇ、私はphpができないんですね。
じゃあ勉強してやればいいじゃんって話なんですが、RubyやPythonやっててまた、LL言語っていうのもねぇ。
次やるならgoやりたいんです。
ということで自分の中ではwordpressじゃないpython製のcms探せばいいんじゃない?
っということで探しました。
それが"mezzanine"です。
ちなみに"django cms"とかpython製のcmsは他にもありますが"mezzanine"はwordpressのような感じです。
インストールは簡単でpython使っている人なら
pip install mezzanineで入れることができます。
なお、mezzanineはdjangoを使っているので、djangoのバージョンが変わらないようにvirtual envとか使ってやるのがベターです。
installできたら
後はdjangoと同様の操作でいけます。
cms自体の管理画面をいじくりたかったら直接mezzanineファイルをいじりましょう。
以下はプロジェクト作成からサーバー起動までです。
もうほとんどdjangoですね。。。
プロジェクト作成
$ mezzanine-project myproject
DB作成
$ cd myproject
$ python manage.py createdb
サーバー起動
$ python manage.py runserver
http://localhost:8000
上のurlで確認
ちなみにmezzanineのメリットを言っておくと
wordpressより高い拡張性とはじめからwordpressで入れないと行けないようなプラグインが入っているので
サイト構築により気を使わなくて良い点です。
css,scssをもっと便利に compassの使い方 (CSS Authoring Framework)
compassとは
以下の公式サイトではCSS Authoring Frameworkとされています。
まぁ、簡単に言うと、sassやscssをcssに変換したり圧縮したりしてくれるツールです。
コマンド打つだけでできるのでデプロイとかのコマンドにも忍ばせることができそうです。
http://compass-style.org
compassのインストール
Ruby製なので以下コマンドだけで大丈夫です。(前もってRubyをinstallしておきましょう)
gem install compass
ちなみにpython製はpyScssと言うものがあります。
圧縮前の初期設定
インストールをするとcompassコマンドが使用できるようになるので以下のコマンドで環境を作りましょう。(既存のプロジェクトに作りたい方はそこでこのコマンドをしてください。)
compass create --sass-dir "sass" --css-dir "css" --javascripts-dir "js" --images-dir "img"
ファイル構成
基本的にconfig.rbにコンパイル後の生成されたファイルのディレクトリや、どういう風にコンパイルするかを記述します。
また、コマンドはconfig.rbのあるディレクトリで行うようになっています。
scssをコンパイルしてcssファイルを作成する
例えばtest.scssをコンパイルしたいときは以下のコマンドでコンパイルします。
compass compile sass/test.scss
すると今回では
cssファイルの中にtest.cssが作成されます。
注意点としてscssファイルはsassのファイルの中に置きましょう。
config.rbのファイル内容
require 'compass/import-once/activate'
# Require any additional compass plugins here.
# Set this to the root of your project when deployed:
http_path = "/"
#cssの出力先を記述している
css_dir = "css"
#scssのファイル設置場所を記述している
sass_dir = "sass"
images_dir = "img"
javascripts_dir = "js"
# You can select your preferred output style here (can be overridden via the command line):
#output_styleはどのようにコンパイルするかを記述している
# output_style = :expanded or :nested or :compact or :compressed
output_style = :compressed
# To enable relative paths to assets via compass helper functions. Uncomment:
# relative_assets = true
# To disable debugging comments that display the original location of your selectors. Uncomment:
# line_comments = false
# If you prefer the indented syntax, you might want to regenerate this
# project again passing --syntax sass, or you can uncomment this:
#sassかscssどちらを使うか記述している(デフォルトはscss)
# preferred_syntax = :sass
# and then run:
# sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass
pythonの仮想環境 virtualenv の使い方
pythonの仮想環境 virtualenv の使い方
好きな名前をつける
virtualenv "仮想環境名称"
これで仮想環境を作ります
次に以下のコマンドで仮想環境を起動します
cd "仮想環境名称"
source bin/activate
はじめはpython2の環境なのでpython3にしたい人は自分で設定しましょう。