• Почему так происходит вместе с uwsgi?

    Tark
    @Tark
    Pyramid'альный мир
    Александр Александров, обратите внимание, что значения всего два - ровно по количеству воркеров uwsgi.

    Если никто не против, расскажу небольшую историю. Когда-то, когда я писал первое приложение на Flask, я решил, что постоянно драть сервер БД ради практически неизменных данных неразумно, и кешировал их локально. Локально, Карл! В переменных. И передавал их в шаблонизатор. А потом я выложил своё творение в сеть и тоже поставил два воркера на uwsgi. И стоило мне добавить раздел меню, как я получал странную ситуацию: на части запросов сайт отображался с созданным меню, а иногда показывалась "старая" версия. Что логично, локально (на дев-сервере) всё работало замечательно.

    Roman Kitaev всенепременно прав, в коде ошибка, не в nginx и не в uwsgi.

    UPD: дело в том, что воркеры uwsgi запускают изолированные процессы, каждый со своим набором данных, соединением с БД/кешами прочими няшностями. Локально в таком случае ничего нельзя хранить. Если очень хочется, стоит присмотреться к асинхронным фреймворкам с единственным процессом.
    Ответ написан
    3 комментария
  • Как добавить объект в базу?

    Tark
    @Tark
    Pyramid'альный мир
    Из-за синтаксической ошибки. Массив - это массив. Объект - это объект.

    var test = {
    '1': {test: 1},
    '2': {test: 2}
    };

    Вот так сработает, но это будет объектом, с этим нельзя будет обращаться как с массивом.
    Ответ написан
    2 комментария
  • Как отдать в шаблон найденые в базе данных обьекты?

    Tark
    @Tark
    Pyramid'альный мир
    А зачем вы делаете jsonify? Передавайте прямо так в шаблон, списком обьектов, а в шаблоне работайте как с обьектами. user.id etc...
    Ответ написан
  • Как переписать класс?

    Tark
    @Tark
    Pyramid'альный мир
    Если нужно именно убрать избыточность и при условии, что код будет вызываться только вашим приложением, то можно его изменить таким образом.

    class Vehicle(API):
        def get(self, endpoint='/tanks/stats/', lang='ru', fields='', account_id=''):
            if type(fields) is list:
                fields = self._format_fields(fields)	
            return self._api_call(endpoint=endpoint, 
                                  fields=fields, 
                                  language=lang, 
                                  account_id=account_id)
    
    vehicle = Vehicle(...)
    
    stats = vehicle.get()
    achievements = vehicle.get('/tanks/achievements/')


    Если же этот код вызывается кем-то ещё, то сами понимаете...
    Ответ написан
    3 комментария
  • Использует ли MongoDB составной индекс частично?

    Tark
    @Tark
    Pyramid'альный мир
    Да, будет.

    Можете просто проверить, .explain() или .explain('executionStats') для 3.0.х
    Ответ написан
  • Как обновлять содержимое страницы, получаемое парсингом другой страницы в Flask?

    Tark
    @Tark
    Pyramid'альный мир
    Вариант первый, не очень хороший:
    from flask import Flask
    import test  # именно так
    
    app = Flask(__name__)
    
    @app.route('/')
    def main_page():
        # постоянно актуальная информация, даже если переменная изменится в другом месте
        return test.text
    
    if __name__ == '__main__':
        app.run()

    Это плохо тем, что работать будет только с одним воркером. То есть если у вас uwsgi, скажем, с двумя процессами, то часть запросов будет попадать на "старое" значение test.text. Если принудительно работать с одним воркером, будет работать правильно.

    Вариант второй, получше: использовать кеш или БД.
    Ответ написан
    8 комментариев
  • Стоит ли писать на питоне под винду?

    Tark
    @Tark
    Pyramid'альный мир
    Нет, не стоит.

    # encoding: utf-8
    
    print u'Чё это вдруг юникод у вас до сих пор не работает? Жуть какая!'

    pKMbCP7.png
    Ответ написан
  • Правильное указание servername Настройка Nginx как Frontend к Web-серверу Apache?

    Tark
    @Tark
    Pyramid'альный мир
    Указывать нужно адрес вашего сайта, это и будет "правильный" server_name.

    В примерах конфигурации серверов, обрабатывающих все запросы, встречается странное имя “_”:
    server {
    listen 80 default_server;
    server_name _;
    return 444;
    }

    Оно не является каким-то особенным, это просто одно из множества некорректных доменных имён, которые никогда не пересекутся ни с одним из реальных имён. С тем же успехом можно использовать имена типа “--” и “!@#”. nginx.org/ru/docs/http/server_names.html
    Ответ написан
    Комментировать
  • Олимпиада по веб, пoмогите понять задание?

    Tark
    @Tark
    Pyramid'альный мир
    > непонятно откуда берется нужное количество показов баннера
    Оно берётся из файла; "10" в конце первой строки, например. Дело в том, что обычно покупают показы баннеров, а не время их размещения: если показывать один и тот же баннер постоянно, то он сильно примелькается, поэтому продают тысячи показов и чередуют баннеры в случайном порядке.

    > зачем даны их id
    Этакий primary key. Возможно, тут - для облегчения выдачи случайного баннера. Можно просто выбрать случайное число от 0 до последнего и выдать баннер, который ему соответствует.

    Вам остаётся лишь как-то сохранять данные о том, сколько раз какой из баннеров показан, и проверять это при выдаче.
    Ответ написан
  • Как преобразовать ([u'\u041e\u0431\.... в буквы?

    Tark
    @Tark
    Pyramid'альный мир
    К сожалению, Питон строки показывает только в строках, а списки и словари будут выдавать такую вот пакость.
    Сделайте
    '\n'.join(error)
    Или
    '<br />'.join(error)
    в предыдущем вашем вопросе.
    Ответ написан
    Комментировать
  • IRC в рунете умер?

    Tark
    @Tark
    Pyramid'альный мир
    На фризоне много русскоязычных IRC-чатов, а на rizon - много анимешных (и русскоязычных тоже). Если же брать в целом, то англоязычных чатов просто дофига. Под любую технологию, движок, язык, СУБД и прочие айтишно-программерские вещи - о, их есть там.
    Ответ написан
    Комментировать
  • Nginx rewrite - как получить значение нескольких переменных?

    Tark
    @Tark
    Pyramid'альный мир
    Есть три варианта решения этой проблемы, два из них одинаково плохи, а третий универсален.

    location / {
        rewrite ^(\d+)/(\d+)$ /index.php?a=$1&b=$2 last;
        .... 
        try_files $uri $uri/ /index.php?a=$uri;
    }

    Это плохо тем, что для КАЖДОГО запроса будет проверяться, не соответствует ли строка одному из заявленных регекспов. Для каждого запроса, включая стили, скрипты и статику. Насчёт last в рейврайте не уверен.

    location ~* /(\d+)/(\d+) {
        rewrite ^(\d+)/(\d+)$ /index.php?a=$1&b=$2 last;
    }
    
    location / {
        try_files $uri $uri/ /index.php?a=$uri;
    }

    Этот способ плох тем, что придётся повторять регексп в локейшне. Насчёт last в реврайте опять же не уверен.

    location / {
        try_files $uri $uri/ /index.php?a=$uri;
    }

    Самый уверсальный способ. Единая точка входа, роутингом рулит PHP. Идеально.
    Ответ написан
    2 комментария
  • Как правильно кэшировать редко изменяемые данные?

    Tark
    @Tark
    Pyramid'альный мир
    Кешировать стоит как раз те данные, которые постоянно нужны.

    Постойте, у вас пользователь ждёт полторы секунды на загрузку каждой страницы - и не за счёт огромного количества данных, а потому, что эти данные заново собираются? Но это же RoR-приложение, самописное, я правильно понимаю? То есть у вас есть доступ к коду, который всё это показывает и к коду, который вызывается, когда транзакции добавляются? Тогда при обновлении транзакций делайте кеш для этого пользователя "протухшим", а в коде, который всё это хозяйство формирует, заново добавляйте кешированный результат в memcached и показывайте его. Тогда в следующий раз актуальный кеш будет выбран из системы кеширования, но на это потребуется в полторы тысячи раз меньше времени, а данные будут всё время актуальными.
    Ответ написан
    7 комментариев
  • Как вызвать глобальную функцию в методе?

    Tark
    @Tark
    Pyramid'альный мир
    Нужно написать название этой функции и поставить открывающую скобочку, а за ней - закрывающую. Если в функцию нужно передать какие-то параметры, их надо написать между скобочками.
    Ответ написан
    2 комментария
  • Как правильно использовать отступы в python?

    Tark
    @Tark
    Pyramid'альный мир
    Если Python ваш первый язык, вам очень повезло!

    if условие:
        действия при выполнении условия
    elif услоие:
        действия при выполнени услвоия elif
    else:
        действия во всех остальных случаях


    В вашем коде нужно сдвинуть блок от while до print('Завершение.') включительно на четыре пробела вправо.
    Почему повезло? Потому что у вас никогда не будет такого вот кода:
    void main()
    {
    printf('Something'); 
        f++; v *= 2;
    printf('Something else');
    
    
       foo(); }


    как будто кого-то вырвало на монитор.
    Python требует идеального, совершенного стиля оформления кода. Ну, кроме длины LoC в восемьдесят символов, тут вы можете спокойно нарушать это правило.
    Ответ написан
    Комментировать
  • Как правильно задать уникальное поле в mongodb?

    Tark
    @Tark
    Pyramid'альный мир
    Уникальным поле будет после добавления индекса по нужному (-ым) ключу(-ам) с опцией {'unique': True}
    Ответ написан
    2 комментария
  • Почему не могу дампнуть базу в django?

    Tark
    @Tark
    Pyramid'альный мир
    Я не работаю с Django. Мне стало интересно, и я запросил у гугла информацию по вопросу "CommandError: Unable to serialize database: no such table: easy_select2_related". Да, прям вот всю нижнюю строчку скопировал. Первая ссылка ведёт на тостер (!), а вторая - на stackoverflow.com/questions/18313703/dumpdata-with... . Обращайтесь, если нужно будет что-нибудь ещё поискать.
    Ответ написан
    Комментировать
  • Какие есть годные книги на русском по программированию web на python3?

    Tark
    @Tark
    Pyramid'альный мир
    Pure Python не применяется в веб-разработке потому, что... придётся писать свой веб-сервер, который будет слушать 80-ый порт, принимать запросы и вертать взад ответы. Хотя постойте, зачем писать веб-сервер? Есть же nginx! А приложения на Python веб-сервер отдаёт через uwsgi. Да! Тогда надо написать что-то, что будет отдавать в uwsgi сгененированный ответ. Получится что-то типа Werkzeug (часть Flask). Или что-то типа Gevent. Или что-то типа Twisted. Или что-то типа Tornado. Или что-то типа wheezy.web. Что-то, что называется WSGI-сервером. А потом на нём придётся сделать что-то типа фреймворка Bottle, чтобы можно было быренько и красиво делать то, ради чего это всё было написано.

    Но... Тут возникают странные мысли насчёт того, есть ли в этом смысл? Может, стоит переложить эту задачу на чужие плечи? Даже в этом ответе уже есть до черта WSGI-серверов, которые написаны людьми, куда более сведущими в этом вопросе. Может быть, стоит сосредоточиться на самом процессе написания приложений, используя уже готовые фреймворки? Рождение ещё одного фреймворка не сделает мир лучше.
    Ответ написан
    1 комментарий
  • Какие есть движоки коллективных блогов на python?

    Tark
    @Tark
    Pyramid'альный мир
    Запрос "livestreet alternative python" выдало сие: https://github.com/mox1/webpy-bootstrap-blog

    Но, возможно, стоит послушать совета приверженеца Самого Лучшего Веб-языка На Свете, Фап-фап-фап-аххх! и написать его самому? Вы потратите несколько (десятков) часов, зато он будет не на webpy и не на SQLite.
    Ответ написан