2019年10月31日木曜日

CentOS7 Mattermost 日本語全文検索設定

たてた Mattermost で 日本語全文検索 を可能にする - アレコレ・ティプス
http://asuki-yt.hatenablog.jp/entry/2018/04/03/200000

2019.10.31 現在、上記サイトの方法でできた。ありがとうございます。
CentOS7
MariaDB 10.1.30
Mattermost 5.16.1

私はMariaDB(MySQL)の設定については
/etc/my.conf に記述した。

2019年10月29日火曜日

CentOS7でDjangoとApache連携


CentOS7でDjangoとApache連携させて公開サイトにしようとしたら3日ほどもかかってしまいました...

1.CentOS7にPython2.7とは別途にPython3.7をインストール
これはわりとすなおにインストールできた。
参考:CentOS7にPython3.7をインストールする - Narito Blog
https://narito.ninja/blog/detail/20/

2.venv環境で mod_wsgi をインストール
これはインストールできなくて試行錯誤した。

3.以下のようなエラーでどうしても接続できない。
mod_wsgi: Exception occurred processing WSGI script '/var/www/python/myproject/mysite'
・・・
ModuleNotFoundError: No module named 'mysite'
(/var/log/httpd/error_logより)

最終的に以下をみつけて解決しました。

Python 3 + mod_wsgi + Django - おっさんプログラマの戯れ言
https://unk-pizza.hatenadiary.org/entry/20170601/p1

$ vim /var/www/python/myproject/mysite/wsgi.py

import os
import sys  # 追加

from django.core.wsgi import get_wsgi_application

sys.path.append('/var/www/python/myproject')          # 追加 sys.path.append('/var/www/python/myproject/mysite')   # 追加

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "test_site.settings")

application = get_wsgi_application()
os.environ.setdefault(・・・)を追加しろというサイトはあったのですが、ファイル末尾に追加してまったく効果がなくて、上記サイトをみてそのとおりに位置を替えたところOKとなりました。

4.DBが開けない
公開URLにしたらDBが開けない Unable to open database というエラーが発生。DBファイルへのパス設定が問題でした。

5.最後に静的ファイルの設定
このままだとCSSファイルやJSファイルを読み込んでくれないので、くずれた表示になります。
まず
$ python manage.py collectstatic
で静的ファイルを/STATIC/ディレクトリに集めます。

次に以下を参考にSTATICとMEDIAディレクトリをApacheで配信できるようにします。

静的ファイルのデプロイ

ファイルを配信する

以上です。

Django 公開URLにしたらDBが開けない

Django-CMSをセッティングして、開発用サーバー($ python manage.py runserver)では問題なかったのですが、Apacheで公開URLに切り替えたところ、

unable to open database file

とのエラー。このときはDBはsqliteでした。Googleでは、DBファイルのパーミッションを書き込み許可しろというようなことが多くでていましたが、パーミッションはOKなのでおかしいなとしばらく調べたところ、DB名設定にパスが必要なようでした。

setting.pyの以下を修正すると見事ログイン画面が表示されました。

DATABASES = {
    'default': {
        'CONN_MAX_AGE': 0,
        'ENGINE': 'django.db.backends.sqlite3',
        'HOST': 'localhost',
        #'NAME': 'project.db', ##これを下に変更する
        'NAME': os.path.join(BASE_DIR, 'project.db'),
        'PASSWORD': '',
        'PORT': '',
        'USER': ''
    }
}


CentOS7 Python3.7 で mod_wsgi がインストールできない

CentOS7にPython3.7をインストールする - Narito Blog
https://narito.ninja/blog/detail/20/

上記を参考に、まずCentOS7にPython3.7.3を次のようにインストールした。

$ curl -O https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz
$ tar xf Python-3.7.3.tgz
$ cd Python-3.7.3
$ ./configure
$ make
$ sudo make altinstall

上記でインストールすると、
$ python3.7 -m venv venv
後の仮想環境で、
(venv) $ pip install mod_wsgi
がエラーでインストールできなかった。
もう一度、./configure に --enable-shared オプションをつけてmakeをやりなおしてみた。
参考:https://qiita.com/methane/items/bf0b74550bee125cdea4

$ ./configure --enable-shared
$ make
$ sudo make altinstall

しかし、今度は ......soがないということでpython3.7自体が起動せず。
もう一度、以下を実行した。

$ ./configure
$ make
$ sudo make altinstall

すると、
$ python3.7 -m venv venv
(venv) $ pip install mod_wsgi

Collecting mod_wsgi
Using cached https://files.pythonhosted.org/packages/25/d8/1df4ba9c051cd88e02971814f0867274a8ac821baf983b6778dacd6e31f7/mod_wsgi-4.6.8.tar.gz
Installing collected packages: mod-wsgi
Running setup.py install for mod-wsgi ... done
Successfully installed mod-wsgi-4.6.8

あっさり成功した。。。

2019年10月18日金曜日

Django Modelで処理した後のデータをViewに渡す

DjangoでDBに保存したデータをTemplateで表示するあれこれについて · PengNote - 勉強した事や行った場所の感想を書くブログ
https://blog.daisukekonishi.com/post/django-display-on-template/

Djangoのobjectから属性1つのみ取得したい場合は flat=True を使う


file_s = Share.objects.filter(shared_user_id=log_id)

Djangoビューのfile_sからfiles_id属性を取得したいと思います。どうすればよいですか?

ベストアンサー
values()を使用して特定の属性を取得し、以下のように辞書のリストを返します。
file_s = Share.objects.filter(shared_user_id=log_id).values('files_id')

1つの属性だけ必要な場合は、flat = True を使用して値の一覧のみを返すようにできます。ただし、リストがどのような順番になるかを確認してください。

file_s = Share.objects.filter(shared_user_id=log_id).values_list('files_id', flat=True).order_by('id')

Django FileField/ImageField でアップロードした同一名のファイルを上書きする

その名前のファイルが既に存在するときにDjangoがファイル名を変更しないようにするにはどうすればいいですか? - コードログ
https://codeday.me/jp/qa/20190329/495576.html

上記コードでは get_available_name() got an unexpected keyword argument 'max_length' というエラーが出たので以下を参考に少し改良しました。

django get_available_name() got an unexpected keyword argument 'max_length'

models.py に Class OverwriteStorage()とfs=・・・を追加して、
ImageField()内に storage=fs を追記します。

import os
from django.conf import settings
from django.core.files.storage
import FileSystemStorage

class OverwriteStorage(FileSystemStorage): 
     def get_available_name(selfname): 
         if self.exists(name): os.remove(os.path.join(settings.MEDIA_ROOT, name)) 
         return name

fs = OverwriteStorage(location=settings.MEDIA_ROOT)

class YourModel(models.Model): 
image_file = models.ImageField(upload_to='image/'storage=fs)

2019年10月15日火曜日

Django staticファイル まとめ - Qiita

How to build a File Manager Storage web app with Django

Part 1 — How to build a File Manager Storage web app with Django Rest Framework and Vue.js with Vuex and Ag-grid integration
https://medium.com/js-dojo/how-to-build-a-file-manager-storage-web-app-with-django-rest-framework-and-vue-js-e89a83318e9c

Django-filer をインストールしたが Tableがないというエラー

Django-filer をインストールしたのですが、以下のようなエラーが出て動作しません。

"Table 'PROJECT.filer_clipboard' doesn't exist"

DBにテーブルが作られていないようです。

一旦、以下のようにmigrateをリセットし、

python manage.py migrate --fake filer zero

migrateをやり直します。

python manage.py migrate filer

無事、以下のテーブルが作成されて動作しました!
filer_clipboard
filer_clipboarditem
filer_file
filer_folder
filer_folderpermission
filer_image
filer_thumbnailoption

2019年10月14日月曜日

Django Admin画面 高度なフィルタ作成 django-advanced-filters

Django Admin画面 フィルタ一覧をドロップダウンメニューにする

How to change the Django admin filter to use a dropdown instead of list? - Stack Overflow
https://stackoverflow.com/questions/5429276/how-to-change-the-django-admin-filter-to-use-a-dropdown-instead-of-list

Install:

pip install django-admin-list-filter-dropdown

Enable in settings.py:

INSTALLED_APPS = (      ...      'django_admin_listfilter_dropdown',      ...  )

Use in admin.py:

from django_admin_listfilter_dropdown.filters import (      DropdownFilter, ChoiceDropdownFilter, RelatedDropdownFilter  )    class EntityAdmin(admin.ModelAdmin):      ...      list_filter = (          # for ordinary fields          ('a_charfield', DropdownFilter),          # for choice fields          ('a_choicefield', ChoiceDropdownFilter),          # for related fields          ('a_foreignkey_field', RelatedDropdownFilter),      )

Here's what it looks like:

Screenshot of dropdown list filter

2019年10月12日土曜日

Django テンプレートについて参考

Django 逆引きチートシート (Template編) - Qiita
https://qiita.com/uenosy/items/3c8e220a01ae21546e1c

DjangoでHTTPリクエストをHTTPSに強制リダイレクト

https://blog.sakaki333.com/blog/view/55

DjangoでHTTPリクエストをHTTPSに強制リダイレクト

settings.py に以下を追加する。

SECURE_SSL_REDIRECT = True

django-imagekit 参考サイト

django-imagekit – Djangoの自動画像処理。 現在v4.0 – GitHubじゃ!Pythonじゃ!
https://githubja.com/matthewwithanm/django-imagekit

サムネイル一括生成コマンド
$ python manage.py generateimages

参考:django-imagekit使ってみた
https://tanishiking24.hatenablog.com/entry/2015/04/07/135105

ResizeToFill以外のオプションは以下などがあります。

ResizeToFit
ResizeToFill
SmartResize
Adjust
TrimBorderColor
Transpose

参考:matthewwithanm/pilkit
https://github.com/matthewwithanm/pilkit

2019年10月4日金曜日

UbuntuのLive USBをつくるには

Ubuntuインストール用または一時的起動用のUSBは作れたのですが、USBから起動して、データもUSBに保存したりできるようにしたかった。
以下を参考にさせていただきました。

UbuntuのLive USBをつくる | MKTIAの備忘録
https://blog.mktia.com/how-to-make-ubuntu-live-usb/


2019年10月3日木曜日

Electron-builderでパッケージ化したLinux用ファイルの実行方法

Electron-builderで Linux用ファイル をパッケージ化すると、
・・・.AppImage
・・・.amd64.snap
というファイルができた。
Ubuntu上でどうやって実行するか分からず、調べてみると AppImage は以下のようにすればよかった。

You have to follow three simple steps to run an AppImage on Ubuntu Linux.
  1. Download .appimage package.
  2. Make it executable by following Right Click on software >> Properties >> Permission Tab >> Check "Allow executing the file as program.
  3. Now run the program.


snapファイルのほうは以下をみると、 インストールするタイプのようですがまだやっていません...

How to Install and Use Snap on Ubuntu 18.04


$ snap install <snapfile>

でエラー(error: cannot find signatures with metadata for snap "snapfile.snap")がでるときは、以下のようにすればよいそうです。

$ snap install --dangerous <snapfile> 

認証されていないプログラムなのでエラーになるようで、 --dangerous はそれを無視するオプションですね。