読者です 読者をやめる 読者になる 読者になる

AWS / PHP / Python ちょいメモ

amazon web service , PHP, Python を使ったときのメモ。日本語でググってもわからなかった事を中心に。

VirtualBox の 共有フォルダ に シンボリックリンク利用はさける

今回は、これだけ。

Windowsホスト上のシンボリックリンクを、VirtualBoxの共有フォルダー として設定しないでおこう。」

vagrant 1.9.2 + VairutalBox 5.1.18 on Win10Pro(x64) の環境で遭遇。


指定してしまった時のエラー

==> host1: Mounting shared folders...
host1: /vagrant => C:/work/_ansible_sym
Vagrant was unable to mount VirtualBox shared folders. This is usually
because the filesystem "vboxsf" is not available. This filesystem is
made available via the VirtualBox Guest Additions and kernel module.
Please verify that these guest additions are properly installed in the
guest. This is not a bug in Vagrant and is usually caused by a faulty
Vagrant box. For context, the command attempted was:

mount -t vboxsf -o uid=1000,gid=1000 vagrant /vagrant

The error output from the command was:

/sbin/mount.vboxsf: mounting failed with the error: Invalid argument


Win上でシンボリックリンク(正確には、今回はジャンクション)を使った理由は、まとめてGitで管理を始めたので作業フォルダと分けようと思ったから。Invalid argument だと対応に時間がかかるので、Symbolic Link does not support とかがいいかも。

参考

vagrant オフィシャル

Symbolic Links
Support for symbolic links across synced folder implementations and host/guest combinations is not consistent

WinのVM環境 : Hyper-V or VirtualBox

Win上の開発環境を検討していて、VirtualBoxHyper-Vって同居できないという事に気づいたのでメモ。

環境:

最終的に僕の場合は、Hyper-Vはインストール済みだが、BCDの編集で起動時にHyperVisorをOffにする事で通常はVirtualBoxを使うという状態を選択しました。

理由は vagrant 利用する場合 Hyper-V 対応のboxがほぼなかったという点につきます。本番想定では別ですが、開発環境という視点だと vagrant で box が利用できるのは大変助かるので。

続きを読む

Django での static files の扱い方まとめ (追加)

以前書いたPOST の中で避けてたw点、よい解決方法が見つかったのでメモ。

400.html, 500html などの動作確認を行いたいなーって思って。Django1.8.17で確認しました。


元POST : Django での static files の扱い方まとめ - AWS / PHP / Python ちょいメモ

ちなみに、開発サーバーでも、次の条件が揃うと、 {{ STATIC_URL }} が自動公開されなくなります。

settings.py : DEBUG="False" & ALLOWED_HOSTS = ['something'] のケース
settings.py : DEBUG="Ture" & runserver —nostaticオプション付 で起動
DEBUG="False"の時にも urls.py の設定で、static files を公開する方法もあり(ググってください)

DEBUG="False" の時に Static files を公開する簡単な方法:

$ python manage.py runserver --insecure

runserver に insecure オプションがあるんですね。

--insecure Allows serving static files even if DEBUG is False.

続きを読む

mod_wsgi は pip でも提供ありなのかぁ

今回 Ubuntu 14.04 に PPA を使って Python 3.5.x を導入したところ、PPAには mod_wsgi がないことに気づき対応策を調べた。

結果 pip で mod_wsgi が提供されてるといううれしい事実を発見し、無事に環境構築完了。

Ubuntu 14.04 だと オフィシャルのリポジトリでは Python3.4 が提供されてます

手順

インストール by pip
  1. 次のパッケージが apt でインストールされてることを確認
    • apache2
    • apache2-dev (apxs : APache eXtenSion tool が インストール時に必要)
  2. pip3 でインストール
    • pip3 install mod_wsgi
続きを読む

Django で view から Form オブジェクトに値を渡す : kwargs活用

args, kwargs が良くわかってなかったので苦労した話。python2.7.x と Django1.8.xでの確認です。

Formオブジェクトに渡すときには

Formオブジェクトを生成するときに、GET パラメーターを渡したいと考えたが発端。あちこち参照して、一つに落ち着きました。

views.py:

class TestFormView(FormView):
    template_name = 'testform.html'
    form_class = TestForm
    success_url = reverse_lazy('index')

forms.py

class TestForm(forms.Form):
    name = forms.CharField(max_length=10)

    def __init__(self, *args, **kwargs):
        super(TestForm, self).__init__(*args, **kwargs)

kwargs で渡し、 pop で取得

これが一番だと思う。

views で こんな感じで渡して:

class TestFormView(FormView):

    def get_form_kwargs(self):
        kwargs = super(TagEditView, self).get_form_kwargs()
        kwargs['user'] = self.request.user
        return kwargs

Form で pop を使って受け取る:

class TestForm(forms.Form):

    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop('user')
        super(TestForm, self).__init__(*args, **kwargs)

この方法だと pop した段階で kwargs から対象の値が削除されるので、その後の親クラス呼ぶときなどに気を使わなくてもいい。

FormViewに用意されてる get_form_kwargs という名称からもよろしげじゃないですかね?

続きを読む