旅好きエンジニアのメモ

旅のこと映画、統計、会計、プログラミングなど、気の向くままに語ります

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
なふうに書いてやれば出来ました。

参考

名称未設定 : Ubuntu12.04LTSのPostgreSQLでEUC_JPのデータベースを作る

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ができないんですね。
じゃあ勉強してやればいいじゃんって話なんですが、RubyPythonやっててまた、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と言うものがあります。

zaka-think.com

 

圧縮前の初期設定

インストールをすると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にしたい人は自分で設定しましょう。