好书接上文。前面基本跑起来了 peatio,但是这不表示每个功能都能用了。这次继续以让不能用的功能变得能用为主线,以功能为单位继续演示搭建貔貅的过程。关注邮件发送。
来到页面,创建用户,tail -f log/production.log
报错
E, [2014-10-23T04:36:09.680510 #11084] ERROR -- : Could not establish TCP connection to 127.0.0.1:5672:
E, [2014-10-23T04:36:09.739548 #11084] ERROR -- : Unable to enqueue :mailer: Could not establish TCP connection to 127.0.0.1:5672: , fallback to synchronous mail delivery
I, [2014-10-23T04:36:09.761065 #11084] INFO -- : Rendered token_mailer/activation.text.erb (1.5ms)
I, [2014-10-23T04:36:09.821529 #11084] INFO -- :
Sent mail to aa@aa.com (56.5ms)
I, [2014-10-23T04:36:09.826371 #11084] INFO -- : Completed 500 Internal Server Error in 289ms
F, [2014-10-23T04:36:09.829332 #11084] FATAL -- :
SocketError (getaddrinfo: Name or service not known):
app/models/amqp_queue.rb:94:in `deliver!'
app/models/amqp_queue.rb:88:in `rescue in deliver'
app/models/amqp_queue.rb:84:in `deliver'
先来保证同步的可以发出去
报错信息中可以看出是邮件的问题,所以先来配置邮件服务。我这里选择的服务是 mailgun 的免费方案,当然 mailgun 对国内的 qq 邮箱支持不太好,所以可能你需要选择国内的某个邮件服务。
application.yml 文件中填入
# below settings only in production env
# system notify mail settings
# --------------------------------------------------------------
SMTP_DOMAIN: peterandbillie.com
SMTP_ADDRESS: smtp.mailgun.org
SMTP_USERNAME: postmaster@peterandbillie.com
SMTP_PASSWORD: e748325xxxxxxxxxa6d79b8f1cfbc
SMTP_PORT: 587
SYSTEM_MAIL_FROM: system@peterandbillie.com
SYSTEM_MAIL_TO: group@peterandbillie.com
另外还要填写
URL_HOST: peterandbillie.com
这些变量都会在 production.rb 的 mailer 设置中用到。 重启服务器
touch tmp/restart.txt
这次收到邮件了。
不过这样发送虽然成功了,用户体验不太好,用户点击按钮之后需要等待一会儿。在 log 中也可以看到
E, [2014-10-23T05:11:20.434603 #12150] ERROR -- : Could not establish TCP connection to 127.0.0.1:5672:
E, [2014-10-23T05:11:20.568388 #12150] ERROR -- : Unable to enqueue :mailer: Could not establish TCP connection to 127.0.0.1:5672: , fallback to synchronous mail delivery
I, [2014-10-23T05:11:20.611862 #12150] INFO -- : Rendered token_mailer/activation.text.erb (3.0ms)
所以,世界本应是异步的,进入下一步。
再来实现后台异步发送邮件
异步操作是这样一个流程:
主要需要两个操作:
第一步,安装 rabbitmq 就是按照 官方文档上的步骤 装好之后
ps aux|grep rabbitmq
看到相应的进程正在运行,那这一步就完事了。
第二步,启动 daemons
执行
bundle exec rake daemons:start
可以使用
ps aux|grep peatio
来查看后台进程起来没有。
全部做好后,清空一下数据库
bundle exec rake db:reset db:migrate
再次使用 happypeter1983@gmail.com 来注册一下。这次反应就快多了。
到邮箱之中,打开邮件完成一下激活,操作没有问题。
好,这一集就是这些了,拜拜!