Потому что в торт-бейке для подключения к базе данных используется сокет unix
, поэтому вам нужно добавить unix_socket для строки подключения.
Вы должны подтвердить местоположение, где хранится mysql.sock в WAS
Пример: в моем случае я использую xampp на MACOS 10.11
(редактировать файл Config / database.php)
public $default = array(
‘datasource’ => ‘Database/Mysql’,
‘persistent’ => false,
‘host’ => ‘localhost’,
‘login’ => ‘root’,
‘password’ => ‘root’,
‘database’ => ‘cakephp’,
‘encoding’ => ‘utf8’,
‘unix_socket’ => ‘/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock’
);
Наконец, это работа для меня!
Вы также можете использовать монаду ST
, которая позволяет писать императивный код, но безопасно предоставляет чисто функциональный интерфейс.
# user.beginStreak----user.lastStreak is the last interval when
# user accessed the site continuously without breaks for more than 25h
def onRegister (user):
...
user.beginStreak = user.endStreak = time() # current time in seconds
...
def onAccess (user):
...
if user.endStreak + 25*60*60 < time():
user.beginStreak = time()
user.endStreak = time()
user.wootBadge = ( user.endStreak-user.beginStreak > 30*24*60*60 )
...
(Пожалуйста, простите мои навыки Pythonic, я академик и первый пользователь сайта)
Вы не можете выполнить эту задачу с одной переменной. Я уверен, что кто-нибудь сможет написать чистый аргумент, подтверждающий этот факт.
Track each visit in your database with a timestamp (which you probably already do anyway). Then create an sql statement and group the result by day, while you count the number of visits that day. In the period of the last 30 days, it's not allowed to have a 0-visit day...
Фактически, если посещения Участника хранятся в базе данных SQL, вы можете сделать все с помощью одного SQL-запроса. Это также, вероятно, быстрее, чем передача всех данных в клиентскую программу для проверки:
/*
Find all members who visited at least once every day
for 30 or more days. --RBarryYoung, 2009-05-31
*/
;WITH
cteVisitDays as (
Select
MemberID
, DATEDIFF(dd,'2008-06-01',VisitTime) as VisitDay
From tblMembersLog
Where Not Exists( Select * From tblMemberTags T
Where T.MemberID = tblMembersLog.MemberID
And T.TagName = 'WOOT!' )
Group By MemberID
, DATEDIFF(dd,'2008-06-01',VisitTime)
)
, cteVisitRunGroups as (
Select
MemberID
, VisitDay - Row_Number() Over(
Partition By MemberID
Order By VisitDay
) as RunGrouping
From cteVisitDays
)
SELECT Distinct
MemberID
From cteVistRunGroups
Group By MemberId, RunGrouping
Having COUNT(*) >= 30
Второй подход ropstah. Статистика пользователя, такая как время входа в систему и т. Д., Обычно доступна в базе данных. Нам необходимо вывести определенные факты из имеющихся данных. Поэтому вместо того, чтобы иметь счетчик для каждого посещения и приращения, я бы предпочел пакетное задание, которое запускается с данными входа пользователя и публикует результаты за этот день.
Но как только пользователь "ворвался", вы можете захотеть прекратить вычислять "woot" для этого пользователя. В противном случае существует вероятность того, что пользователь будет «ухаживать» каждый день, пока не наступит день без входа в систему. (но это второстепенная проблема).
Если это единственное, что вы хотите регистрировать, то, возможно, это хорошее решение. Однако мне нравится хранить логику и ведение журнала отдельно, как для увеличения объема необработанной информации в моем распоряжении, так и для обеспечения возможности настройки логики без нарушения существующих данных.
В этом случае я бы регистрировал каждое посещение или каждое посещение действие (в зависимости от требований / пространства / и т. д.), а затем напишите где-нибудь sproc или метод, который проверял данные и возвращал true (соответствует критериям для значка) или false (не соответствует критериям).
Единственный случай, когда Я бы создал специальную схему для хранения информации, как это было, если требуемые вычисления занимали слишком много времени, либо из-за количества данных, либо из-за их сложности.