通过亚马逊EC2的许多Django应用程序部署使用HTTP服务器NGINX和Gunicorn.
我想知道他们实际上做了什么以及为什么两者并行使用.并行运行它们的目的是什么?
我有一个Django应用程序,目前托管在亚马逊的EC2服务上.我有两台机器,一台是Django应用程序,另一台是我的PostgreSQL数据库.到目前为止,它一直坚如磐石.
许多消息来源声称我应该将Redis实现到我的堆栈中,但是使用Django和Postgresql实现Redis的目的是什么?例如,如何在我的Django代码中实现Redis?
如何在PostgreSQL中使用它?
这些都是我一直试图找到答案的问题,所以我来到这里希望得到最大和最好的答案.我真的很感激任何答案.
谢谢
我们已经运行了postgresql 8.4很长一段时间了.与任何数据库一样,我们正在慢慢达到我们的空间门槛.我添加了另一个8 GB EBS驱动器并将其安装到我们的实例,并将其配置为在名为/ files的目录上正常工作
在/ files中,我手动创建
如果我错了,请纠正我,但我相信所有postgresql数据都存储在/var/lib/postgresql/8.4/main中
我备份了数据库,然后运行了sudo /etc/init.d/postgresql stop.这会停止postgresql服务器.我试图将/var/lib/postgresql/8.4/main的内容复制并粘贴到/ files目录中,但结果却是一个巨大的瑕疵!由于文件权限.我不得不进入并修改该文件夹的内容,以便我可以复制并粘贴它们.由于root权限,某些文件未完全复制.我修改了postgresql.conf中的data_directory参数,指向files目录
data_directory = '/files/postgresql/main'
Run Code Online (Sandbox Code Playgroud)
我运行sudo /etc/init.d/postgresql restart并且服务器无法启动.再次可能是由于许可问题.Amazon EC2仅允许您在默认情况下以ubuntu的身份访问该服务.您只能从终端内访问root,这会使一切变得复杂得多.
这样做是否有更清洁,更有效的一步一步的方法?
我有以下网址:
url = http://photographs.500px.com/kyle/09-09-201315-47-571378756077.jpg
我想在这个网址中提取文件名:09-09-201315-47-571378756077.jpg
获得此文件名后,我将使用此名称将其保存到桌面.
filename = **extracted file name from the url**
download_photo = urllib.urlretrieve(url, "/home/ubuntu/Desktop/%s.jpg" % (filename))
Run Code Online (Sandbox Code Playgroud)
在此之后,我将调整照片的大小,一旦完成,我将保存调整大小的版本并在文件名的末尾附加单词"_small".
downloadedphoto = Image.open("/home/ubuntu/Desktop/%s.jpg" % (filename))
resize_downloadedphoto = downloadedphoto.resize.((300, 300), Image.ANTIALIAS)
resize_downloadedphoto.save("/home/ubuntu/Desktop/%s.jpg" % (filename + _small))
Run Code Online (Sandbox Code Playgroud)
从这个,我想要实现的是获得两个文件,原始照片与原始名称,然后调整大小的照片与修改名称.像这样:
09-09-201315-47-571378756077.jpg
09-09-201315-47-571378756077_small.jpg
我该怎么做呢?
Instagram最近改变了他们的API政策,允许开发人员通过他们自己的应用程序将图片发布到Instagram平台.我们之前使用的其他几种技术来做到这一点.其中一个是调用Instagram应用程序,它实际上会打开Instagram并从那里进行共享.有关如何完成此操作的教程可以在这里看到:如何从您自己的iOS应用程序共享图像到Instagram
然而,有几个应用程序允许直接共享到Instagram平台而无需调用Instagram应用程序.Hipstamatic的Oggl允许直接共享到Instagram而无需调用Instagram.下面我发布了一些过程的屏幕截图.
拍完照片后,Oggl给了我其他几个社交网络,我可以分享我的照片.我选择了Facebook和Instagram.

在我选择Instagram后,它打开了Safari,它带我到以下两页授权Oggl发布到Instagram.我输入了我的Instagram凭据,然后它将我带到了授权页面.

一旦我授权Oggl,我就可以上传到Instagram,几秒钟后,我在Instagram新闻Feed中看到了这张照片.这种类型的共享非常类似于Facebook和Twitter共享.它有相同的概念.怎么可以这样做呢?如何在他们的应用程序中复制这个确切的过程?在我的应用程序中拍摄的照片是612像素×612像素,因此它们与Instagram上拍摄的照片尺寸兼容.我已经实现了对Facebook和Twitter的共享,但我想像Oggl那样实现上传到Instagram.这可能吗?
有许多iOS开发人员可以从这个问题的详细规范答案中受益.
谢谢
最近,我一直在深入研究Twisted文档.从我收集的内容来看,Twisted功能的基础是它的事件循环称为"Reactor".reactor侦听某些事件并将它们分派给已设计用于处理这些事件的已注册回调函数.在书中,有一些伪代码描述了Reactor的功能,但我无法理解它,它对我没有任何意义.
while True:
timeout = time_until_next_timed_event()
events = wait_for_events(timeout)
events += timed_events_until(now())
for event in events:
event.process()
Run Code Online (Sandbox Code Playgroud)
这是什么意思?
我看到了这篇文章:http://maxburstein.com/blog/realtime-django-using-nodejs-and-socketio/
这使我走向了一个正确的方向.
我目前有一个iOS前端和一个Django后端.我使用Gunicorn为前端应用程序提供数据.我的iOS应用程序和我的支持之间的通信是基于REST的.我只是来回发送JSON.我不提供任何网页.只是JSON的回应.
我已经实现了一个简单的帖子和评论模型:
class Post(models.Model):
user = models.ForeignKey(User)
blog = models.CharField(max_length=5000)
class Comment(models.Model):
comment = models.CharField(max_length=140)
user = models.ForeignKey(User)
post_id = models.ForeignKey(Post)
created_at = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)
用户可以制作博客帖子,其他用户可以对其进行评论.因此,如果userX有博客文章和userY评论它.我想通知userX userY对他/她的帖子发表了评论.
我以前依靠pyAPNS来通知用户; 使用Twisted向APNS发送通知的python包装器,但如果userX关闭我的应用程序的推送通知,则userX将无法接收应用程序内通知.所以我运气不好.
我只关心应用内通知.我仍然希望userX在应用程序中接收实时更新.
当用户发出POST请求时,Django可以将消息发布到Redis上的频道.Node.js将订阅该频道,socket.io会将其发送给该特定用户.
这是我的views.py的精简版本,其中创建了注释对象.我发送了发表评论的用户,帖子的ID以及发布博客文章的用户的ID.用户将使用json向此网址发布请求:http://example.com:8000 / upload-comment /
def UploadComment(request):
data = json.loads(request.body)
redis_server = redis.Redis(host='12.345.678.9', port=6379, db=0, password='mypassword')
newComment = Comment()
newComment.comment = data['comment']
newComment.user_id = data['user_id']
newComment.post_id = data['post_id']
newComment.save()
PostOwner = data['post_owner_id'] #id of the blog post owner
# …Run Code Online (Sandbox Code Playgroud) 我已经构建了一个简单的Django照片应用程序.用户可以上传照片,关注其他用户和照片.为了处理用户之间的关系(跟随和取消关注),我使用了一个名为django-relations by coleifer的软件包.这是一个很棒的包,使用起来非常简单.
一切都按预期工作.我目前有一个工作活动Feed.
我将Feed分为两部分:跟随(我关注的用户的所有活动)和你(发生在我身上的所有活动).我在我的iOS应用程序下面发布了两张图片,它使用我的Django照片应用程序,因为它是后端:

我想要做的是添加聚合到以下Feed.正如你所看到的,用户alexperri喜欢5次射击.我想将所有这些项目合并为一行.我不需要为"你"提要添加聚合,因为我希望看到每个单独的操作都发生在我身上.但是对于以下Feed,添加聚合是有意义的.有几个应用程序可以很好地进行聚合.Fashionlista,Pinterest和Instagram做得很好.这是一个来自Instagram的例子来展示我想要实现的目标:

在上面的示例中,您可以看到以下Feed,而lovetoronto喜欢5张照片.我开始在播放后使用Instagram来查看它是如何工作的.Instagram关注源显示最多35个活动条目,每个条目最多可包含该活动类型的5个活动."lovetoronto喜欢5张照片"是一个活动条目,它显示了他喜欢的最新5张照片.由于lovetoronto进行了最新的动作,他处于领先地位.
我想实现相同的设置.
这是我目前的模型设置:
models.py
from django.db import models
from django.contrib.auth.models import User
class Photographer(models.Model):
user = models.OneToOneField(User, primary_key=True
likes = models.ManyToManyField('Photo', through = 'Likes',
related_name = 'likedby', blank = True)
class Photo(models.Model):
photographer = models.ForeignKey(Photographer, related_name = 'shot_owner')
created = models.DateTimeField(auto_now_add=True)
url = models.CharField(max_length=128)
class Likes(models.Model):
liked_at = models.DateTimeField(auto_now_add=True, blank=True, null=True)
photographer = models.ForeignKey(Photographer, related_name = 'liked_by')
photo = models.ForeignKey(Photo, null=True)
class Activity(models.Model):
actor = models.ForeignKey(Photographer, related_name = 'actor')
receiver = models.ForeignKey(Photographer, related_name …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试确定每个Amazon实例类型的适当工作人数.我曾经经营过一名Gunicorn工人,但事实证明这很慢.
许多开发人员目前正在使用此公式来衡量适合的工人数量:
NUM_WORKERS=3 #recommended formula here is 1 + 2 * NUM_CORES
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,亚马逊对每个实例运行的核心数量并不十分清楚.例如,M1小实例有1个EC2计算单元(1个虚拟核心和1个EC2计算单元)
这基本上意味着什么?它有一个核心?或者它有两个核心?
worker-process worker amazon-ec2 amazon-web-services gunicorn
我一直在使用PostgreSQL.我的所有数据都存在于Postgres中.我最近研究过redis,它有很多强大的功能,否则需要在Django(python)中做几行.Redis数据是持久的,只要它运行的机器没有停机,您可以将其配置为每1000个键或每5分钟左右写入存储到磁盘的数据,具体取决于您的选择.
Redis会创建一个很好的缓存,它肯定会取代我在python中编写的很多函数(投票给用户的帖子,查看朋友列表等等).但我担心的是,所有这些数据都需要转化为postgres.我不相信将这些数据存储在redis中.我认为redis是一种临时存储解决方案,可以快速检索信息.它非常快,远远超过对postgres进行重复查询.
我假设从技术上将redis数据写入数据库的唯一方法是保存()通过Django从redis到postgres数据库的'get'查询得到的任何东西.
这是我能想到的唯一解决方案.你知道这个问题的其他解决方案吗?
django ×6
python ×5
postgresql ×3
amazon-ec2 ×2
gunicorn ×2
ios ×2
redis ×2
event-loop ×1
feed ×1
instagram ×1
json ×1
news-feed ×1
nginx ×1
node.js ×1
permissions ×1
reactor ×1
redis-cache ×1
tastypie ×1
twisted ×1
ubuntu ×1
worker ×1