MacBookのディスクに空きがなくなって困ったので外付けのUSBメモリを買った。親指の爪くらいの小ささで、出っ張らないやつを挿しっぱなしにする計画。
で、外付けUSBのフォーマットについてなんだけど、USBメモリはデフォルトではFATで、これだと大きいサイズのファイルを扱えないかった。exFATにフォーマットしたら、Windowsパソコンともデータを共有できていいんじゃないかと思った。いまはVirtualBoxの中にしかWindows入ってないけど、そのうちWindowsのパソコンも買うかもしれないから、そのときに便利なようにという配慮。
しかし、exFATにはタイムカプセルでバックアップをとれないという落とし穴があった。バックアップはとっておきたい。小さなUSBメモリは嬉しいんだけど、なんかそのうち壊れたりするんじゃないだろうかって不安になる。
ということで、データを一時的に退避させて「Mac OS 拡張(ジャーナリング)」ってやつにフォーマットしなおすことにした。「Mac OS 拡張(大文字/小文字を区別、ジャーナリング)」というのもあるけど、大文字/小文字は区別しないのが普通みたい。実際のところ、Max OSXでは、大文字/小文字が異なるだけで同じ名前のファイルを作成できない。というわけで、大文字/小文字を区別しない方の「Mac OS 拡張(ジャーナリング)」にフォーマットするのが無難な選択のようだ。
もう再フォーマットはしたくない。けど、USB3.0はなかなか速い。
2016-02-25
2016-02-17
DjangoでModelFormのカスタマイズ
DjangoでModelFormを使っていて、FormFieldを追加するとき。Modelのinstanceとの値のやりとりをどうしようか迷う。どうやら、初期値はModelFormの__init__()でモデルからフォームに渡してやり、フォームからモデルへの値の変更はModelFormの_post_save()でやるのが良さそう。
理解可能なように説明すると面倒くさいからできそうにない。
という感じだといいのではないか。
理解可能なように説明すると面倒くさいからできそうにない。
class ArticleForm(forms.ModelForm):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.fields["text"].initial = self.instance.get_nice_text()
def _post_clean(self):
super()._post_clean()
self.instance.set_nice_text(self.cleaned_data["text"])
という感じだといいのではないか。
2016-02-12
django-allauthを使ってTwitterアカウントでログイン
django-allauthを使って、Twitterアカウントでログインする機能を追加しようとしている。いくつか注意点。
django-allauth側の設定としては、settings.pyでの設定と、Webの管理画面でのDBの設定と二つやらないとダメ。管理画面では、social applicationsのとこでサイトIDを忘れずにと追加してあげないといけない。
Twitter側の設定としては、Callback URLを指定していないと、Twitterでログインする機能を利用できないでエラーになる。「Allow this application to be used to Sign in with Twitter」っていうのにチェックを入れていても、それだけじゃダメ。
ちなみに、Twitterにウェブアプリを登録しようとしたんだけど、現時点では日本語ドメインに対応していないみたい。punycodeでもダメ。不正はURLとして扱われる。
django-allauth側の設定としては、settings.pyでの設定と、Webの管理画面でのDBの設定と二つやらないとダメ。管理画面では、social applicationsのとこでサイトIDを忘れずにと追加してあげないといけない。
Twitter側の設定としては、Callback URLを指定していないと、Twitterでログインする機能を利用できないでエラーになる。「Allow this application to be used to Sign in with Twitter」っていうのにチェックを入れていても、それだけじゃダメ。
ちなみに、Twitterにウェブアプリを登録しようとしたんだけど、現時点では日本語ドメインに対応していないみたい。punycodeでもダメ。不正はURLとして扱われる。
2016-02-11
Ubuntu14.04でDjangoを複数動かす
Apache2.4のVirtualHost、python3.4のvenv、mod_wsgiのdaemon mode、これらを使った。手順というよりも注意点を書き留めておく。
Ubuntu14.04では、python3のvenvが失敗するという情報があったけど、大丈夫だった。venv(もしくはpyvenv)は、「apt-get install python3.4-venv」でインストールしないといけない。
venvが失敗するというのは、ensurepipモジュールが欠けていて、pipがインストールされないとのことだった。その場合に、手動でpipをインストールすれば良いとかいう情報もあった(手動でpipをインストールした場合、apt-getからインストールしたpython3-psycopg2とかpython3-lxmlとかへのパスが通っているのかは謎)。しかし、問題なくvenvを実行できた。
仮想環境をつくるときは、pyvenvではなく、python3 -m venv を呼び出すクセをつけておいた方が良さそう。複数のバージョンのpython3が入っている場合に、どのpython3を使ってvenvを実行するのかで、仮想環境で使うpythonのバージョンを選択できるからだ。pyvenvだとこれができない。
とはいえ、mod_wsgiを動かすpythonのバージョンを細かく指定することは、たぶんできない。だから本番のサーバーではpyvenvを使おうがvenvを使おうが同じことだ。
仮想環境をつくるときは、「python3 -m venv --system-site-packages --symlinks 仮想環境ディレクトリへのパス」という具合にオプションを与えておくと、activateしたときに、mod_wsgiを動かすときに近い環境になるはず。--upgradeを付けとけば、失敗してもやり直せる。(--upgrade なしでもやり直せそう。あと、--symlinks はデフォルト値だから省略していい。)
activateするには、「source 仮想環境ディレクトリへのパス/bin/activate」。 activateした後でsudoすると、環境変数が上書きされてしまうのでやってはいけない。たとえば、activateした後で「sudo pip install django」とやると、デフォルトのpython2のsite-packagesにdjangoがインストールされてしまう。そうならないように「sudo -s」としてから、activateする。で「pip install django」とやれば、仮想環境のsite-packagesにインストールされる。
Ubuntu14.04では、python3のvenvが失敗するという情報があったけど、大丈夫だった。venv(もしくはpyvenv)は、「apt-get install python3.4-venv」でインストールしないといけない。
venvが失敗するというのは、ensurepipモジュールが欠けていて、pipがインストールされないとのことだった。その場合に、手動でpipをインストールすれば良いとかいう情報もあった(手動でpipをインストールした場合、apt-getからインストールしたpython3-psycopg2とかpython3-lxmlとかへのパスが通っているのかは謎)。しかし、問題なくvenvを実行できた。
仮想環境をつくるときは、pyvenvではなく、python3 -m venv を呼び出すクセをつけておいた方が良さそう。複数のバージョンのpython3が入っている場合に、どのpython3を使ってvenvを実行するのかで、仮想環境で使うpythonのバージョンを選択できるからだ。pyvenvだとこれができない。
とはいえ、mod_wsgiを動かすpythonのバージョンを細かく指定することは、たぶんできない。だから本番のサーバーではpyvenvを使おうがvenvを使おうが同じことだ。
仮想環境をつくるときは、「python3 -m venv --system-site-packages --symlinks 仮想環境ディレクトリへのパス」という具合にオプションを与えておくと、activateしたときに、mod_wsgiを動かすときに近い環境になるはず。--upgradeを付けとけば、失敗してもやり直せる。(--upgrade なしでもやり直せそう。あと、--symlinks はデフォルト値だから省略していい。)
activateするには、「source 仮想環境ディレクトリへのパス/bin/activate」。 activateした後でsudoすると、環境変数が上書きされてしまうのでやってはいけない。たとえば、activateした後で「sudo pip install django」とやると、デフォルトのpython2のsite-packagesにdjangoがインストールされてしまう。そうならないように「sudo -s」としてから、activateする。で「pip install django」とやれば、仮想環境のsite-packagesにインストールされる。
2016-02-10
Apache2.4でBasic認証の設定が効かないで困った
Apache2.4で、Basic認証を設定しようとしたんだけど、普通にアクセスできてしまって困った。Apach2.2では動作していた設定を、ほとんどそのままコピーしたつもりだったのに、何がいけないんだか悩んだ。
Basic認証のために「Require valid-user」と設定したかったのに、「Require all granted」が前の方に書かれていて、これが効いてしまっていたのが原因だった。
Basic認証のために「Require valid-user」と設定したかったのに、「Require all granted」が前の方に書かれていて、これが効いてしまっていたのが原因だった。
2016-02-08
Ubuntu Serverでapache2の設定変更が反映されないで困った
Ubuntu Serverでapache2の設定変更が反映されないで困っていた。
a2ensiteやらa2dissiteやらで設定するのに慣れていないため、どこかにミスがあるのだろうと長時間にわたり試行錯誤。
結局のところ、
なお、「apachectl restart」なら、「Permission denied」って失敗のメッセージが出る。ただし、このコマンドだと成功したときには何もメッセージが出ないから不安になる。「echo $?」とやって、戻り値が0なら成功、それ以外なら失敗と判断することもできるが。
a2ensiteやらa2dissiteやらで設定するのに慣れていないため、どこかにミスがあるのだろうと長時間にわたり試行錯誤。
結局のところ、
service apache2 restartとコマンドを打つところで、sudo を忘れていただけだった。「 * Restarting web server apache2」というメッセージが出るだけだったから、権限で失敗していることに気づかずに、履歴から同じコマンドを叩きまくっていた。
なお、「apachectl restart」なら、「Permission denied」って失敗のメッセージが出る。ただし、このコマンドだと成功したときには何もメッセージが出ないから不安になる。「echo $?」とやって、戻り値が0なら成功、それ以外なら失敗と判断することもできるが。
2016-02-07
Ubuntu Server 14.4 で sshd -t するとエラーが出るんだけどこれは何だろう?
sshd -t は、/etc/ssh/sshd_config の設定内容などをテストしてくれるコマンドだ。Ubuntu Server 14.4 で実行してみたら、こんなエラーが出るんだけど何でだろう?
# sshd -tssh_host_ed25519_keyは、秘密鍵のファイル名だけど、パーミッションを調べたら、
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/etc/ssh/ssh_host_ed25519_key' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: /etc/ssh/ssh_host_ed25519_key
Could not load host key: /etc/ssh/ssh_host_ed25519_key
-rw-r--r-- 1 root rootとなっていて誰でも読めてしまう状態になっていた。だから、
# chmod 600 ssh_host_ed25519_keyってやったらエラーは出なくなった。けど、なんでパーミッションがこんな状態になっていたのかよく分からない。
登録:
投稿 (Atom)