小编Tom*_*sen的帖子

使用nginx,django和芹菜正确设置多个网站

我试图找到一些关于在linode上设置多个django站点的正确方法的信息(Ubuntu 12.04.3 LTS(GNU/Linux 3.9.3-x86_64-linode33 x86_64)

这就是我现在拥有的:

网络服务器:nginx

每个站点都包含在.virtualenv中

在每个.virtualenv中使用pip安装Django和其他软件包

使用RabbitMQ进行安装sudo apt-get rabbitmq,并为每个站点创建一个新用户和vhost.

每个站点都使用supervisor脚本启动:

[group:<SITENAME>]
programs=<SITENAME>-gunicorn, <SITENAME>-celeryd, <SITENAME>-celerycam


[program:<SITENAME>-gunicorn]
directory = /home/<USER>/.virtualenvs/<SITENAME>/<PROJECT>/
command=/home/<USER>/.virtualenvs/<SITENAME>/bin/gunicorn <PROJECT>.wsgi:application -c /home/<USER>/.virtualenvs/<SITENAME>/<PROJECT>/server_conf/<SITENAME>-gunicorn.py

user=<USER>
autostart = true
autorestart = true
stderr_events_enabled = true
redirect_stderr = true
logfile_maxbytes=5MB


[program:<SITENAME>-celeryd]
directory=/home/<USER>/.virtualenvs/<SITENAME>/<PROJECT>/
command=/home/<USER>/.virtualenvs/<SITENAME>/bin/python /home/<USER>/.virtualenvs/<SITENAME>/<PROJECT>/manage.py celery worker -E -n <SITENAME> --broker=amqp://<SITENAME>:<SITENAME>@localhost:5672//<SITENAME> --loglevel=ERROR
environment=HOME='/home/<USER>/.virtualenvs/<SITENAME>/<PROJECT>/',DJANGO_SETTINGS_MODULE='<PROJECT>.settings.staging'

user=<USER>
autostart=true
autorestart=true
startsecs=10
stopwaitsecs = 600

[program:<SITENAME>-celerycam]
directory=/home/<USER>/.virtualenvs/<SITENAME>/<PROJECT>/
command=/home/<USER>/.virtualenvs/<SITENAME>/bin/python /home/<USER>/.virtualenvs/<SITENAME>/<PROJECT>/manage.py celerycam
environment=HOME='/home/<USER>/.virtualenvs/<SITENAME>/<PROJECT>/',DJANGO_SETTINGS_MODULE='<PROJECT>.settings.staging'

user=<USER>
autostart=true
autorestart=true
startsecs=10
Run Code Online (Sandbox Code Playgroud)

问题1:这是正确的方法吗?或者这是一个更好的方法吗?

问题2:我曾尝试安装芹菜花,但这对多个网站有何影响?我是否需要为每个.virtualenv安装一个花包,或者我可以为每个站点使用一个安装吗?如何设置nginx以在我的服务器上显示花页?

django celery django-celery flower

5
推荐指数
1
解决办法
1040
查看次数

使用具有多个站点的docker进行开发和生产

目前我有3个linode服务器:

1:缓存服务器(Ubuntu,清漆)

2:App服务器(Ubuntu,nginx,rabbitmq-server,python,php5-fpm,memcached)

3:数据库服务器(Ubuntu,postgresql + pg_bouncer)

在我的app-server上,我有多个站点(topdomains).每个站点都在使用virtualenvwrapper创建的虚拟环境中.有些网站很大,流量很大,有些网站很小,流量很小.

一个典型的网站包括蟒蛇(django),芹菜(殴打,花)和gunicorn.

我现在的开发模式现在正在app-server上的临时环境中工作,并将更改提交给git.然后将环境更改为生产环境并执行a git pull,./manage.py migrate并重新启动流程sudo supervisorctl restart sitename:,但这需要时间!必须有一个更简单的方法!

因此,似乎docker可以帮助简化一切,但我无法决定如何管理每个站点内的所有站点和容器的最佳方法.

我查看了http://panamax.iohttps://github.com/progrium/dokku,但不确定其中一个是否符合我的需求.

理想情况下,我会在本地计算机上运行每个站点的开发版本(模拟缓存服务器,app-server和db-server),在那里进行代码更改并测试它们.当我看到更改工作时,我会执行一个命令,它将执行所有繁重的工作并将更改发送到linode服务器(我认为主要是app-server),执行所有迁移并在服务器上重新启动项目.

任何人都可以指出我正确的方向如何实现这一目标?

django linode docker dokku

5
推荐指数
1
解决办法
1795
查看次数

使用docker run启动容器,现在它没有显示在docker ps -a中

我用docker run启动了一个docker容器,如下所示:

docker run \
-d \
--name plex \
--restart unless-stopped \
--network=host \
-e TZ="<timezone>" \
-e PLEX_CLAIM="<claimToken>" \
-v <path/to/plex/database>:/config \
-v <path/to/transcode/temp>:/transcode \
-v <path/to/media>:/data \
plexinc/pms-docker
Run Code Online (Sandbox Code Playgroud)

链接到GitHub.com/plexinc/pms-docker

docker容器正在运行,因为我能够访问端口和服务,但我似乎无法在运行时列出容器sudo docker ps -asudo docker ps -aqsudo docker ps --filter "name=plex"

我试着运行pstree,得到了这个输出:

systemd???accounts-daemon???2*[{accounts-daemon}]
        ??agetty
        ??atd
        ??containerd???14*[{containerd}]
        ??cron
        ??dbus-daemon
        ??dockerd???docker-containe???docker-containe???s6-svscan???s6-supervise
        ?         ?                 ?                 ?           ??s6-supervise???python???{python}
        ?         ?                 ?                 ??9*[{docker-containe}]
        ?         ?                 ??17*[{docker-containe}]
        ?         ??docker-proxy???6*[{docker-proxy}]
        ?         ??21*[{dockerd}]
        ??dockerd???containerd???containerd-shim???s6-svscan???s6-supervise
        ?         ?            ?                 ?           ??s6-supervise???sh???Plex …
Run Code Online (Sandbox Code Playgroud)

linux ubuntu docker

5
推荐指数
0
解决办法
411
查看次数

查询字段值 - 返回未定义的全局名称

我试着编写一个查询来从列表中过滤/排除某些对象,但是我收到了一个错误.

我的模特:

class Benefit(TimeStampedModel):
    DEAL = 'D'
    NODEAL = 'N'

    TYPE_CHOICES = (
        (NODEAL, 'Does not need any signed deal'),
        (DEAL, 'Needs a signed deal'),
    )

    name = models.CharField(max_length=200)
    benefit_type = models.CharField(max_length=1, choices=TYPE_CHOICES, default=DEAL)    



class Profile(models.Model):
    user = models.OneToOneField(User)
    benefits = models.ManyToManyField(Benefit, verbose_name="Used benefits", blank=True, null=True, related_name="used_benefit")
Run Code Online (Sandbox Code Playgroud)

我的看法:

class ProfilePage(TemplateView):
    template_name = "profile/frontpage.html"

    def get_context_data(self, **kwargs):
            context = super(ProfileFrontpage, self).get_context_data(**kwargs)
            context['unused_benefits'] = Benefit.objects.filter(used_benefit__isnull=True).exclude(benefit_type=='N')
            context['nodeal_benefits'] = Benefit.objects.filter(benefit_type=='N')
            return context
Run Code Online (Sandbox Code Playgroud)

但它没有用.我收到此错误:global name 'benefit_type' is not defined

我不确定为什么会收到这个错误?我不认为我需要制作模型字段的变量?

django django-models django-queryset

4
推荐指数
1
解决办法
1534
查看次数

如果表单字段为空,则使用ajax阻止表单提交

我有一个简单的形式有些麻烦.如果字段为空,我似乎无法阻止表单提交.有没有一种简单的方法来检查字段是否为空,然后阻止表单提交?

这是我的html表单:

<form method="post" name="simpleForm" id="simpleForm" action="handler.php">
<fieldset>
    <legend>Info</legend>
            <p><label for="name">Name</label><br>
            <input id="name" name="name" class="text" /></p>
            <p><label for="email">Email</label><br>
            <input id="email" name="email" class="text" /></p>

    <legend>Questions</legend>
            <p><label for="qs_1">Question 1</label><br>
            <input id="qs_1" name="qs_1" class="text" /></p>
            <p><label for="qs_2">Question 2</label><br>
            <input id="qs_2" name="qs_2" class="text" /></p>
            <p><label for="qs_3">Question 3</label><br>
            <input id="qs_3" name="qs_3" class="text" /></p>

</fieldset>             

<p><input type="submit" name="submit" value="Send" id="sub_btn" /></p>
</form>
Run Code Online (Sandbox Code Playgroud)

这是我的javascript:

$("form#simpleForm").submit(function() {

        var name     = $('#name').attr('value');
        var email    = $('#email').attr('value');
        var qs_1     = $('#qs_1').attr('value');
        var qs_2     = $('#qs_2').attr('value');
        var qs_3     = $('#qs_3').attr('value');



            $.ajax({ …
Run Code Online (Sandbox Code Playgroud)

javascript ajax jquery

3
推荐指数
1
解决办法
1万
查看次数

为gunicorn创建supervisord脚本的正确方法?Django 1.6

这是我的gonicorn.conf,但我似乎无法正确使用命令.当我在命令行中键入它时,Im尝试的命令正在工作,但不是作为Supervisor命令.

[program:gunicorn]
directory = /home/USER/.virtualenvs/SITE/myApp/
command=/home/USER/.virtualenvs/SITE/bin/python /home/USER/.virtualenvs/SITE/myApp/manage.py run_gunicorn myApp.wsgi:application -c /home/USER/.virtualenvs/SITE/myApp/gunicorn.conf.py
user = USER
autostart = true
autorestart = true
redirect_stderr = true
stdout_logfile = /home/USER/logs/gunicorn.log
stderr_logfile = /home/USER/logs/gunicorn_err.log
Run Code Online (Sandbox Code Playgroud)

gunicorn的正确命令是什么?

这是我尝试启动gunicorn时得到的错误:

/home/USERNAME/.virtualenvs/SITE/local/lib/python2.7/site-packages/sorl/thumbnail/helpers.py:5: DeprecationWarning: django.utils.simplejson is deprecated; use json instead.
  from django.utils import simplejson

2013-02-25 13:46:55 [3975] [INFO] Starting gunicorn 0.17.2
2013-02-25 13:46:55 [3975] [INFO] Listening at: http://127.0.0.1:8000 (3975)
2013-02-25 13:46:55 [3975] [INFO] Using worker: sync
2013-02-25 13:46:55 [3988] [INFO] Booting worker with pid: 3988
2013-02-25 13:46:55 [3988] [ERROR] Exception in …
Run Code Online (Sandbox Code Playgroud)

django nginx supervisord gunicorn

3
推荐指数
1
解决办法
6283
查看次数

从字符串中获取最后一位数字

我有这个字符串:tag:domain.com,2012-10-12:feed/channel/id/335

我试图将此字符串中的最后一位数字转换为变量.此字符串中的日期也是动态的,但我不需要在变量中.

这是我的代码:

$string = "tag:domain.com,2012-10-12:feed/channel/id/335";

preg_match(?'/tag\:domain\.com,|\d+|-|\d+|-|\d+|\:feed\/channel\/id\/|\d+/', $string, $matches);


$last_digits = ???    
Run Code Online (Sandbox Code Playgroud)

也许有一种更简单的方法可以做到这一点?

php regex

2
推荐指数
1
解决办法
1101
查看次数

不能让Gunreorn主管django 1.6的Newrelic工作

我试图让NewRelic python代理与我的设置与主管和gunicorn一起工作,但无法让它工作.

以下是我当前的主管设置:

[program:gunicorn]
directory = /home/<USER>/.virtualenvs/<DOMAIN>/myproject/
command=/home/<USER>/.virtualenvs/<DOMAIN>/bin/gunicorn my_project.wsgi:application
Run Code Online (Sandbox Code Playgroud)

我试着这样做:

[program:gunicorn]
directory = /home/<USER>/.virtualenvs/<DOMAIN>/myproject/

#Working command
#command=/home/<USER>/.virtualenvs/<DOMAIN>/bin/gunicorn myproject.wsgi:application


command=/home/<USER>/.virtualenvs/<DOMAIN>/bin/newrelic-admin run-program /home/<USER>/.virtualenvs/<DOMAIN>/bin/gunicorn myproject.wsgi:application
environment=NEW_RELIC_CONFIG_FILE=/home/<USER>/.virtualenvs/<DOMAIN>/myproject/newrelic.ini

user = <USER>
autostart = true
autorestart = true
stderr_events_enabled = true
redirect_stderr = true
stdout_logfile = /home/<USER>/logs/gunicorn.log
stderr_logfile = /home/<USER>/logs/gunicorn_err.log
Run Code Online (Sandbox Code Playgroud)

但后来我收到这个错误:

Traceback (most recent call last):
  File "/home/user/.virtualenvs/domain.com/lib/python2.7/site.py", line 688, in <module>
    main()
  File "/home/user/.virtualenvs/domain.com/lib/python2.7/site.py", line 679, in main
    execsitecustomize()
  File "/home/user/.virtualenvs/domain.com/lib/python2.7/site.py", line 547, in execsitecustomize
    import sitecustomize
  File "/home/user/.virtualenvs/domain.com/local/lib/python2.7/site-packages/newrelic-1.10.2.38-py2.7-linux-x86_64.egg/newrelic/bootstrap/sitecustomize.py", line 74, in <module>
    newrelic.agent.initialize(config_file, environment) …
Run Code Online (Sandbox Code Playgroud)

python django supervisord newrelic

2
推荐指数
1
解决办法
3357
查看次数

插入 pdo 之前清空表

我有一个从 rss 文件导入数据的脚本,我想在插入之前清空我的表,所以我的数据库中没有任何旧条目,但我无法获得正确的语法,因为没有删除任何内容。

这是我正在尝试的:

try {
    $db->beginTransaction();

    $stmt = $db->prepare("DELETE FROM $table");

    $stmt = $db->prepare("INSERT INTO $table(id,name) VALUES(:id,:name)ON DUPLICATE KEY UPDATE name=:name");
    $stmt->execute(array(':id' => $id, ':name' => $name));

    $db->commit();
} catch(PDOException $ex) {
    //Something went wrong rollback!
    $db->rollBack();
    echo $ex->getMessage();
}    
Run Code Online (Sandbox Code Playgroud)

编辑

我尝试过使用 Truncate,但认为我需要删除,因为 truncate 不会清空/删除任何内容:

try {
    $db->beginTransaction();

    $stmt = $db->prepare("TRUNCATE TABLE $table");

    $stmt = $db->prepare("INSERT INTO $table(id,name) VALUES(:id,:name)ON DUPLICATE KEY UPDATE name=:name");
    $stmt->execute(array(':id' => $id, ':name' => $name));

    $db->commit();
} catch(PDOException $ex) {
    //Something went wrong rollback!
    $db->rollBack(); …
Run Code Online (Sandbox Code Playgroud)

php mysql pdo

1
推荐指数
1
解决办法
1万
查看次数

pgbouncer 无法连接到本地 postgresql 数据库(超时)

我试图让 pgbouncer 在我的独立 postgresql 服务器上工作,但是当我尝试使用 pgbouncer 端口连接到数据库时,出现超时错误。

PostgreSQL: 9.1.8

pgBouncer:1.4.2

操作系统:Ubuntu 12.04.2 LTS (GNU/Linux 3.8.4-x86_64-linode31 x86_64)

这是我的 conf 文件:

[databases]
postgres = host=127.0.0.1 port=5432 dbname=postgres
mydb = host=127.0.0.1 port=5432 dbname=mydb

[pgbouncer]
logfile = /home/username/pg_log/pgbouncer.log
pidfile = /tmp/pgbouncer.pid
listen_addr = xxx.xxx.xxx.xxx
listen_port = 6432
unix_socket_dir = /var/run/postgresql
auth_type = md5
auth_file = /etc/pgbouncer/userlist.txt
admin_users = postgres
stats_users = stats, root
user = postgres
pool_mode = session
server_reset_query = DISCARD ALL
max_client_conn = 1000
default_pool_size = 20
log_connections = 1
log_disconnections = …
Run Code Online (Sandbox Code Playgroud)

postgresql pgbouncer

1
推荐指数
1
解决办法
2万
查看次数

使用jquery从url获取url变量

我有一个只显示价格的html表单,但不向服务器提交任何内容.这现在工作正常.

如何仅从url变量添加运行此表单的功能,因此如果您使用url变量来到此页面,则不必单击"提交"按钮?

这样的事情:www.my-domain.com/formurl/?smoker=yes&amount=500000&age=20应该在页面加载完成后显示价格,并根据url变量更改表单值.

这是我的HTML:

<form class="form-horizontal">
        <label class="control-label" for="smoker">Do you smoke?</label>
        <select id="smoker" name="smoker"><option value="No">No</option><option value="Yes">Yes</option></select>

        <label class="control-label" for="amount">Amount</label>
        <select id="amount" name="amount"><option value="500000">500 000</option><option value="1000000">1 000 000</option><option value="1500000">1 500 000</option><option value="2000000">2 000 000</option></select>

        <label class="control-label" for="age">Age</label>
        <input id="age" name="age" type="text" />


        <button class="btn" id="calc" type="submit">Show price</button>
</form>


<div class="alert alert-info hide" id="price-result"></div>
Run Code Online (Sandbox Code Playgroud)
$(document).ready(function () {

    //JSON object
    var obj = {"data":
    [
        {"age": "18","500000": "645","1000000": "1018","1500000": "1391","2000000": "1764","smoker": "No"},
        {"age": "19","500000": "645","1000000": "1018","1500000": "1391","2000000": "1764","smoker": "No"},
        {"age": "20","500000": "645","1000000": "1018","1500000": …
Run Code Online (Sandbox Code Playgroud)

jquery

1
推荐指数
1
解决办法
6483
查看次数

IntegerField 中只接受 11 位数字(不少于 11 位,不超过 11 位)

我有一个 IntegerField,我希望输入只接受 11 位数字/数字的值。

我试图在该领域制作一个正则表达式验证器,但我的问题是当我尝试使用该领域制作模型表单时。如果值为 10 位或更少,我只会收到验证错误,但如果我尝试使用 12 位及以上的值,则不会收到任何验证错误。

这是我的模型字段:

number =  models.IntegerField(max_length=11, validators=[RegexValidator(r'\d{11,11}','Number must be 11 digits','Invalid number')])
Run Code Online (Sandbox Code Playgroud)

如果值超过 11 位,我该如何做到这一点,以便我收到验证错误?

python regex django django-models django-validation

1
推荐指数
1
解决办法
1635
查看次数

使用OneToOne字段保存模型

我创建了一个配置文件模型来扩展默认的django用户(使用django 1.6)但是我无法正确保存配置文件模型.

这是我的模型:

from django.contrib.auth.models import User

class Profile(models.Model):
    user = models.OneToOneField(User)
    mobilephone = models.CharField(max_length=20, blank=True)  
Run Code Online (Sandbox Code Playgroud)

这是我的celery-task,用于从wdsl文件更新personrecords:

@task()
def update_local(user_id):

    url = 'http://webservice.domain.com/webservice/Person.cfc?wsdl'

    try:
        #Make SUDS.Client from WSDL url
        client = Client(url)
    except socket.error, exc: 
        raise update_local.retry(exc=exc)
    except BadStatusLine, exc:
        raise update_local.retry(exc=exc)


    #Make dict with parameters for WSDL query
    d = dict(CustomerId='xxx', Password='xxx', PersonId=user_id)

    try:
        #Get result from WSDL query
        result = client.service.GetPerson(**d)
    except (socket.error, WebFault), exc:
        raise update_local.retry(exc=exc)
    except BadStatusLine, exc:
        raise update_local.retry(exc=exc)



    #Soup the result
    soup = BeautifulSoup(result) …
Run Code Online (Sandbox Code Playgroud)

python django django-models django-users

0
推荐指数
1
解决办法
852
查看次数