運送屋さんがメールを送ります.


運送業者票のメッセージを書いて送る時、直接メールを使って送るとシステムの反応がとても遅くなりますので、rabitmq+celleryを調べて、メール送信の非同期実行を実現しました.
      配置ラビットmq
      RabbiitMQはErrlangに基づいているので、まずErrlang環境を配置しなければならない.
      エリンランドの公式サイトからhttp://www.erlang.org/download.html 最新のerlangインストールパッケージをダウンロードして、私がダウンロードしたバージョンはotp_です.srcusR 15 B 01.tar.gz
tar xvzf otp_src_R15B01.tar.gz
cd otp_src_R14B03
./configure
make
make install
Errlangをインストールして、ラビットMQ-Severのインストールを開始します.
主に公式文書を参照します.http://www.rabbitmq.com/build-server.html
比較的新しいPythonバージョンをインストールする必要があります.取り付け略
''
このステップはしていません.インストールにも影響がありません.ここでは記載だけです.
simplejsonをインストールしたいです.ここから最新バージョンをダウンロードします.http://pypi.python.org/pypi/simplejson#downloads .私がダウンロードしたバージョンはシンプルJ-2.2.tar.gzです.
$ tar xvzf simplejson-2.2.1.tar.gz
$ cd simplejson-2.2.1
$ sudo python setup.py install
''
そしてラビットMQ Serverをインストールします.ここからソースコードバージョンのRabbiitMQをダウンロードします.http://www.rabbitmq.com/server.html.私がダウンロードしたバージョンはラビットmqです.server-35.54.tar.gz
$ tar xvzf rabbitmq_server-3.5.4.tar.gz
$ cd rabbitmq_server-3.5.4
$ make
# TARGET_DIR=/usr/local SBIN_DIR=/usr/local/sbin MAN_DIR=/usr/local/man make install
sbin/ディレクトリに三つのコマンドが現れました.
rabbitmqctl rabsimq-env ラヴィットmq-server
インストールに成功しました
実行
sbin/ディレクトリが見つかりました.プログラムを実行します.
/usr/local/sbin/rabbitmq-server –detached
停止プログラム:
/usr/local/sbin/rabbitmqctl stop
settings.pyにrabitmqプロファイルを追加する:
BROKER_HOST = "127.0.0.1"
BROKER_PORT = 5672
BROKER_USER = "guest"
BROKER_PASSWORD = "guest"
BROKER_VHOST = "/"
'''以下は参考資料''です.
設定
主に公式文書を参照します.http://www.rabbitmq.com/configure.html
一般的には、RabbiitMQのデフォルト構成は十分です.特別な設定を望むなら、二つのルートがあります.
一つは環境変数のプロファイルrabbitmq-env.co nfです.
一つは構成情報のプロファイルrabbitmq.co.figである.
この二つのファイルはデフォルトではありません.必要なら自分で作成してください.
rabbilimq-env.com
このファイルの位置は確定と変更できません.ディレクトリの下にあります.
ファイルの内容には、ラビットMQの環境変数が含まれています.
ヽoo.ツ.ツ.....................................................NODE_PORT=   //ポート番号
ヽoo.ツ.....................................................
RABBITMQ_NODENAME=mq
RABBITMQ_CONFIG_FILE=       //設定ファイルのパス
RABBITMQ_MNESIA_BASE=/rabsimq/data       //使用するMNESIAデータベースのパス
RABBITMQ_LOG_BASE=/rabsimq/log       //ロゴのパス
RABBITMQ_PLUGINS_DIR=/rabritymq/plugins   //プラグインのパス
具体的なリストをご覧ください.http://www.rabbitmq.com/configure.html#define-environment-variables
rabsimq.co.fig
これは標準的なerlangプロファイルです.これはerlangプロファイルの基準に適合していなければなりません.
デフォルトのディレクトリもあれば、rabitmq-env.comファイルに配置することもできます.
ファイルの内容は以下の通りです.http://www.rabbitmq.com/configure.html#config-items
    配置エクセル
    直接実行
    pip install django-celery
settings.pyに以下の構成を追加します.  
 import djcelery
    djcelery.setup_loader()
    ...
    INSTALLED_APPS = (
       ...
       'djcelery',
       ...
    )
    最後にCleryを作成するために必要なデータテーブルが、Southをデータ移動ツールとして使用すると、実行されます.
    python manage.py migrate
    さもなくば運行します:(Django 1.6あるいはDjango 1.7はすべてできます)
    python manage.py syncdb
    これでdjango+rabitmq+celleryの環境が整いました.以下はメールで送るコードです.ここはdjangoの持参したメール送信機能です.
    settings.pyにメール送信設定を追加します.
EMAIL_HOST='outlook.office365.com'
EMAIL_HOST_USER='**@**.com'
EMAIL_HOST_PASSWORD='***'
EMAIL_USE_TLS = True
    新しいpyファイルを作成して、tasky.pyと名づけます.
    
from celery.task import Task
from celery import task
from workflow import models
from django.core.mail import EmailMessage
from django.template import loader
from worksystem.settings import EMAIL_HOST_USER
@task() 
def send_email(subject, content, to_name_list):
    html_content = loader.render_to_string(
                        'sendmail.html',               #     html  
                        {
                         'content':content
                            
                        }
                   )
    msg = EmailMessage(subject, html_content, EMAIL_HOST_USER, to_name_list)
    msg.content_subtype = "html" # Main content is now text/html
    msg.send()
    sendmail.のテンプレート: 
html>

  ,         ,      http://**.**.com/
                
                    
                        
                        
                    
                
                
                {% for アイテム in content %}
                
                
                
                
                
                
                
                
                
                
                
                             
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                                  
                
                
                
                 
                
                
                
                
                {% endfor %}
      
             列名の対応する値のプライマリキーID{ item.id }}工単名称{ item.title }}申請者{ item.creator }}シートタイプ{ item.type }}作成時間{ item.create𞓜date:「Y-m-d」 H:i:s" }}承認者{ item.approveuser }}説明{ item.description }}処理人{{ item.dealuuser }}運帷回答{{ item.ops reply }}状態{ item.state }}