Quantcast
Channel: Discourse Meta - Latest topics
Viewing all 60721 articles
Browse latest View live

Unable to get a Discourse User Name for a dynamic path

$
0
0

@justme wrote:

I just upgraded our Discourse install today and some of our custom menu items were broken. For example, we have a menu item that will take a person to their preferences page (yes, I know you can hit the preference icon under your avatar). From the version we upgraded from to the current version, the URL pathing changed. I've tried to fix it up with some java script, but it's not working (very novice) It returns "undefined" like I'm not logged in, but I am logged in. I'm very novice on javascript and where it should go. I've made the modification in Themes/Edit CSS/HTML/Desktop/Header. I've put the code snippet I'm using below.

   <li class='last'><a id="pprefs" href='https://SITE_BASE_URL'><span>Preferences</span></a></li>
          <script type="text/javascript">
              <!-- Update menu URLs based on current user -->
              <!-- var currentusername = Discourse.User.currentProp('username'); -->
               var currentusername = Discourse.User.current();
               document.getElementById("pprefs").href = "https://SITE_BASE_URL/u/" + currentusername + "/preferences/account";
          </script>

I have been able to get it to return the path string minus the variable part. So I know it's calling the script.
I've tried a number of different ways (as you can see from the code snippet) Any help in correcting this, telling me where to move the JS to, how to do it correctly (with examples), or that it won't work (and why) would be greatly appreciated. I'm on code base 393c060 if that helps.

Posts: 3

Participants: 2

Read full topic


Importing mbox files fails at creating topics due to html_to_markdown.rb error

$
0
0

@yanokwa wrote:

I am using Discourse v1.8.0.beta12 +34 and I've used Icy's Google Group Crawler to generate mboxes of the various Google Groups I'm importing into Discourse. I've successfully imported a couple of groups, but I've run into an issue where the script errors with this message.

creating forum topics
	441 / 1429 ( 30.9%)  [104 items/min]  /var/www/discourse/lib/html_to_markdown.rb:117:in `visit_li': undefined method `name' for nil:NilClass (NoMethodError)
		from /var/www/discourse/lib/html_to_markdown.rb:63:in `visit'
		from /var/www/discourse/lib/html_to_markdown.rb:48:in `block in traverse'
		from /usr/local/lib/ruby/gems/2.3.0/gems/nokogiri-1.7.1/lib/nokogiri/xml/node_set.rb:187:in `block in each'
		from /usr/local/lib/ruby/gems/2.3.0/gems/nokogiri-1.7.1/lib/nokogiri/xml/node_set.rb:186:in `upto'
		from /usr/local/lib/ruby/gems/2.3.0/gems/nokogiri-1.7.1/lib/nokogiri/xml/node_set.rb:186:in `each'
		from /var/www/discourse/lib/html_to_markdown.rb:48:in `traverse'
		from (eval):3:in `visit_div'
		from /var/www/discourse/lib/html_to_markdown.rb:63:in `visit'
		from /var/www/discourse/lib/html_to_markdown.rb:48:in `block in traverse'
		from /usr/local/lib/ruby/gems/2.3.0/gems/nokogiri-1.7.1/lib/nokogiri/xml/node_set.rb:187:in `block in each'
		from /usr/local/lib/ruby/gems/2.3.0/gems/nokogiri-1.7.1/lib/nokogiri/xml/node_set.rb:186:in `upto'
		from /usr/local/lib/ruby/gems/2.3.0/gems/nokogiri-1.7.1/lib/nokogiri/xml/node_set.rb:186:in `each'
		from /var/www/discourse/lib/html_to_markdown.rb:48:in `traverse'
		from /var/www/discourse/lib/html_to_markdown.rb:63:in `visit'
		from /var/www/discourse/lib/html_to_markdown.rb:48:in `block in traverse'
		from /usr/local/lib/ruby/gems/2.3.0/gems/nokogiri-1.7.1/lib/nokogiri/xml/node_set.rb:187:in `block in each'
		from /usr/local/lib/ruby/gems/2.3.0/gems/nokogiri-1.7.1/lib/nokogiri/xml/node_set.rb:186:in `upto'
		from /usr/local/lib/ruby/gems/2.3.0/gems/nokogiri-1.7.1/lib/nokogiri/xml/node_set.rb:186:in `each'
		from /var/www/discourse/lib/html_to_markdown.rb:48:in `traverse'
		from /var/www/discourse/lib/html_to_markdown.rb:63:in `visit'
		from /var/www/discourse/lib/html_to_markdown.rb:48:in `block in traverse'
		from /usr/local/lib/ruby/gems/2.3.0/gems/nokogiri-1.7.1/lib/nokogiri/xml/node_set.rb:187:in `block in each'
		from /usr/local/lib/ruby/gems/2.3.0/gems/nokogiri-1.7.1/lib/nokogiri/xml/node_set.rb:186:in `upto'
		from /usr/local/lib/ruby/gems/2.3.0/gems/nokogiri-1.7.1/lib/nokogiri/xml/node_set.rb:186:in `each'
		from /var/www/discourse/lib/html_to_markdown.rb:48:in `traverse'
		from /var/www/discourse/lib/html_to_markdown.rb:42:in `to_markdown'
		from /var/www/discourse/lib/email/receiver.rb:198:in `select_body'
		from mbox.rb:426:in `block (2 levels) in create_forum_topics'
		from /var/www/discourse/script/import_scripts/base.rb:432:in `block in create_posts'
		from /var/www/discourse/script/import_scripts/base.rb:431:in `each'
		from /var/www/discourse/script/import_scripts/base.rb:431:in `create_posts'
		from mbox.rb:419:in `block in create_forum_topics'
		from /var/www/discourse/script/import_scripts/base.rb:784:in `block in batches'
		from /var/www/discourse/script/import_scripts/base.rb:783:in `loop'
		from /var/www/discourse/script/import_scripts/base.rb:783:in `batches'
		from mbox.rb:413:in `create_forum_topics'
		from mbox.rb:57:in `execute'
		from /var/www/discourse/script/import_scripts/base.rb:45:in `perform'
		from mbox.rb:555:in `<top (required)>'
		from googlegroup.rb:51:in `load'
		from googlegroup.rb:51:in `import_to_discourse'
		from googlegroup.rb:73:in `<main>'

Within the index.db that is generated by mbox.rb, I was able to use the following query to find the problematic email.

select msg_id from emails where reply_to is null order by date(email_date) limit 1 offset 441;

The text of the problematic email is:

X-Received: by 10.180.19.132 with SMTP id f4mr6705803wie.2.1361472079953;
        Thu, 21 Feb 2013 10:41:19 -0800 (PST)
X-BeenThere: opendatakit-developers@googlegroups.com
Received: by 10.180.74.115 with SMTP id s19ls244190wiv.28.gmail; Thu, 21 Feb
 2013 10:41:19 -0800 (PST)
X-Received: by 10.180.94.41 with SMTP id cz9mr4982820wib.1.1361472079334;
        Thu, 21 Feb 2013 10:41:19 -0800 (PST)
Received: by 10.194.136.148 with SMTP id qa20mswjb;
        Thu, 21 Feb 2013 09:58:15 -0800 (PST)
X-Received: by 10.180.93.230 with SMTP id cx6mr6427354wib.5.1361469494823;
        Thu, 21 Feb 2013 09:58:14 -0800 (PST)
X-Received: by 10.180.93.230 with SMTP id cx6mr6427353wib.5.1361469494759;
        Thu, 21 Feb 2013 09:58:14 -0800 (PST)
Return-Path: <msundt@cs.washington.edu>
Received: from mail-wg0-f49.google.com (mail-wg0-f49.google.com [74.125.82.49])
        by gmr-mx.google.com with ESMTPS id cv1si227271wib.0.2013.02.21.09.58.14
        (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
        Thu, 21 Feb 2013 09:58:14 -0800 (PST)
Received-SPF: neutral (google.com: 74.125.82.49 is neither permitted nor denied by domain of msundt@cs.washington.edu) client-ip=74.125.82.49;
Authentication-Results: gmr-mx.google.com;
       spf=neutral (google.com: 74.125.82.49 is neither permitted nor denied by domain of msundt@cs.washington.edu) smtp.mail=msundt@cs.washington.edu;
       dkim=pass header.i=@cs.washington.edu
Received: by mail-wg0-f49.google.com with SMTP id 15so7416651wgd.28
        for <opendatakit-developers@googlegroups.com>; Thu, 21 Feb 2013 09:58:14 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=cs.washington.edu; s=goo201206;
        h=mime-version:x-received:in-reply-to:references:date:message-id
         :subject:from:to:cc:content-type;
        bh=Buq7rT8CzH7De/JtrpoxUeJdzRrJ9ebIwPE9NSuOC64=;
        b=ScbOu/UEky1QHpZxiATAYDUKxqEiIACnA0CJwTfzo1no0xjqXuHeHXVUWDLsb4aAbk
         dwXTSK0l2dccz/fz+qb2mPFtPN5FSFHJ2T38YRE7Y/btJOinp7gRolGVnTuxJLggsZU2
         2wg+x3zRwil32GSYH4PEqygT1B4fF3JTzGIGM=
MIME-Version: 1.0
X-Received: by 10.194.238.226 with SMTP id vn2mr43228790wjc.23.1361469494368;
 Thu, 21 Feb 2013 09:58:14 -0800 (PST)
Received: by 10.217.104.197 with HTTP; Thu, 21 Feb 2013 09:58:14 -0800 (PST)
In-Reply-To: <117D9812611FDE4FA732C14A851163E543674E06@CH1PRD0102MB145.prod.exchangelabs.com>
References: <CAMPkn0C=Hm3n06Ok-u5Y7aBo-QTv0LoOb1dOUAcsevrAoNqqOQ@mail.gmail.com>
	<117D9812611FDE4FA732C14A851163E543674E06@CH1PRD0102MB145.prod.exchangelabs.com>
Date: Thu, 21 Feb 2013 09:58:14 -0800
Message-ID: <CAO69cUAShG6n51t=iHNrh2h0Yb-tShNPqEfAs_MS=smKst9GmQ@mail.gmail.com>
Subject: Re: Appspot quota
From: Mitchell Sundt <msundt@cs.washington.edu>
To: opendatakit-developers@googlegroups.com
Cc: Amarjeet Singh <amarjeet@iiitd.ac.in>
Content-Type: multipart/alternative; boundary=089e01493c9897e72904d63fd17d
X-Gm-Message-State: ALoCoQkaRp0jxqJY2XkY8WaEWSqgu9Mp735fLsw+Vf7hvP64h7s7H8G6tUk9kR9HMgxrV9nTvPhh

--089e01493c9897e72904d63fd17d
Content-Type: text/plain; charset=windows-1252
Content-Transfer-Encoding: quoted-printable

Adding opendatakit-developers@ to this, as the answers could be of interest
to other developers...

The error page: 'you may have exceeded quota' is displayed whenever the
server has an uncaught exception or otherwise returns a 500 error (internal
server error). It could have several causes, but the most likely is an
over-quota error. There is no way to be more specific with this error, as
it is using the static error page to present the error and, by the time you
have an over-quota exception, you can't reliably execute any java code to
diagnose the true cause.

If the appengine dashboard indicates that the app is not over-quota (no red
bars), and that the app is not currently subject to resource throttling
(this will be a small triangular ! warning just below the Billing Status
heading), then you should examine the Logs for the application (from the
appengine Dashboard, click on the 'Logs' link on the left sidebar). Look
first for log entries with Critical or Error entries. If none show up, then
look at warnings.  The key warning to look for is the 'your request took
longer than 60 seconds, so AppEngine terminated it' warning.  Otherwise,
any error within the ODK Aggregate code should generate a Critical or Error
entry.

--------------
As for profiling, I'd be interested in hearing your findings. Profiling
AppEngine is problematic because you cannot glean any useful information
from running in the development environment.  ODK Aggregate is a bit odd in
that it does not use Memcache because configuring that on Tomcat would have
greatly complicated the installer. Instead, frequently-accessed values are
cached within the Java layer and refreshed about every 3-6 seconds.

AppEngine performance is definitely limited to what we can do with
BigTables datastores without using any indices beyond the default
one-dimensional indices (this is because our data tables are dynamically
constructed, and there is no Java API to dynamically construct composite
indices). There is very little optimization you can do for AppEngine
datastore interactions because of this -- the limitations are effectively
written into the code.

MySQL and PostgreSQL are much more flexible, and database profiling can be
used to create extra indices as needed to tailor and tune for performance,
and those extra indices will be used by the database to improve query
performance.

Additionally, MySQL and PostgreSQL databases both provide mechanisms for
tracking how many of each type of query or datastore action (insert/delete)
are performed (e.g., CRUD reports, query timing reports).  So no
instrumentation is provided on that activity within ODK Aggregate.

AppEngine, however, provides no visibility into things like CRUD reports or
query timing reports.

To remedy that, code within ODK Aggregate periodically emits the equivalent
of a CRUD report (independent of the datastore used).  This is a set of log
entries of the form:
2012-12-05 15:03:38.317
org.opendatakit.common.persistence.engine.DatastoreAccessMetrics
logUsage: ---------- 2012-12-05T23:03:38.317+0000 @ 3892 ------------
 I 2012-12-05 15:03:38.318
org.opendatakit.common.persistence.engine.DatastoreAccessMetrics
logUsage: TASK_LOCK,0,0,0,0,0
 I 2012-12-05 15:03:38.318
org.opendatakit.common.persistence.engine.DatastoreAccessMetrics
logUsage: _COST_LOGGING_,1,1,0,0,0
 I 2012-12-05 15:03:38.318
org.opendatakit.common.persistence.engine.DatastoreAccessMetrics
logUsage: _STRING_FIELD_LENGTHS_,0,0,0,0,0
 I 2012-12-05 15:03:38.318
org.opendatakit.common.persistence.engine.DatastoreAccessMetrics
logUsage: opendatakit.EXTREMELY_WIDE_FLAT_CORE,0,0,0,0,0
 I 2012-12-05 15:03:38.319
org.opendatakit.common.persistence.engine.DatastoreAccessMetrics
logUsage: opendatakit._backend_actions,0,0,6,0,0
 I 2012-12-05 15:03:38.319
org.opendatakit.common.persistence.engine.DatastoreAccessMetrics
logUsage: opendatakit._filter_group,0,0,0,0,0
 I 2012-12-05 15:03:38.319
org.opendatakit.common.persistence.engine.DatastoreAccessMetrics
logUsage: opendatakit._form_data_model,0,0,0,0,0
 I 2012-12-05 15:03:38.319
org.opendatakit.common.persistence.engine.DatastoreAccessMetrics
logUsage: opendatakit._form_info,4,52,0,0,0
 I 2012-12-05 15:03:38.320
org.opendatakit.common.persistence.engine.DatastoreAccessMetrics
logUsage: opendatakit._form_info_fileset,0,0,0,0,0
 I 2012-12-05 15:03:38.320
org.opendatakit.common.persistence.engine.DatastoreAccessMetrics
logUsage: opendatakit._form_info_manifest_bin,0,0,0,0,0
 I 2012-12-05 15:03:38.320
org.opendatakit.common.persistence.engine.DatastoreAccessMetrics
logUsage: opendatakit._form_info_submission_association,0,0,0,0,0
 I 2012-12-05 15:03:38.320
org.opendatakit.common.persistence.engine.DatastoreAccessMetrics
logUsage: opendatakit._form_info_xform_bin,22,22,0,0,0
 I 2012-12-05 15:03:38.320
org.opendatakit.common.persistence.engine.DatastoreAccessMetrics
logUsage: opendatakit._form_info_xform_blb,0,0,1,0,0
 I 2012-12-05 15:03:38.321
org.opendatakit.common.persistence.engine.DatastoreAccessMetrics
logUsage: opendatakit._form_info_xform_ref,1,1,0,0,0
 I 2012-12-05 15:03:38.321
org.opendatakit.common.persistence.engine.DatastoreAccessMetrics
logUsage: opendatakit._form_service_cursor,0,0,0,0,0
 I 2012-12-05 15:03:38.321
org.opendatakit.common.persistence.engine.DatastoreAccessMetrics
logUsage: opendatakit._fusion_table,0,0,0,0,0
 I 2012-12-05 15:03:38.321
org.opendatakit.common.persistence.engine.DatastoreAccessMetrics
logUsage: opendatakit._fusion_table_repeat,0,0,0,0,0
 I 2012-12-05 15:03:38.322
org.opendatakit.common.persistence.engine.DatastoreAccessMetrics
logUsage: opendatakit._granted_authority_hierarchy,1,13,0,0,0
 I 2012-12-05 15:03:38.322
org.opendatakit.common.persistence.engine.DatastoreAccessMetrics
logUsage: opendatakit._misc_tasks,0,0,0,0,0
 I 2012-12-05 15:03:38.322
org.opendatakit.common.persistence.engine.DatastoreAccessMetrics
logUsage: opendatakit._persistent_result_file_bin,0,0,0,0,0
 I 2012-12-05 15:03:38.322
org.opendatakit.common.persistence.engine.DatastoreAccessMetrics
logUsage: opendatakit._persistent_results,0,0,0,0,0
 I 2012-12-05 15:03:38.322
org.opendatakit.common.persistence.engine.DatastoreAccessMetrics
logUsage: opendatakit._registered_users,1,1,2,0,0
 I 2012-12-05 15:03:38.323
org.opendatakit.common.persistence.engine.DatastoreAccessMetrics
logUsage: opendatakit._security_revisions,0,0,7,0,0
 I 2012-12-05 15:03:38.323
org.opendatakit.common.persistence.engine.DatastoreAccessMetrics
logUsage: opendatakit._server_preferences,0,0,0,0,0
 I 2012-12-05 15:03:38.323
org.opendatakit.common.persistence.engine.DatastoreAccessMetrics
logUsage: opendatakit._user_granted_authority,2,2,0,0,0
 I 2012-12-05 15:03:38.323
org.opendatakit.common.persistence.engine.DatastoreAccessMetrics
logUsage: -----------------------------------------
The comma-separated numbers are reset to zero after this report is logged,
and the 5 values correspond to:


   1. queries issued,
   2. rows of query results returned,
   3. count of gets (query by-primary-key),
   4. count of puts (insert/update),
   5. counts of deletes


These are reported against each table in the datastore (the string after
logUsage: and before the string of numbers).
They are reported for all datastores, so you should not see any significant
variation in these numbers when migrating from AppEngine to MySQL or
PostgreSQL.

-----------
To get the AppEngine-equivalent functionality to a longest-query report on
MySQL or PostgreSQL, there is a cost logging feature within ODK Aggregate
(and only within the AppEngine datastore).
If any query takes longer than the value of the
COST_LOGGING_MEGACYCLE_THRESHOLD in the _COST_LOGGING_ table, then ODK
Aggregate will emit a log message with the query and the time the query
took. These are logged as Warnings to the log, and are the most common
warnings you'll see in the log.

An example of this is:
  W 2012-12-05 15:03:39.029
org.opendatakit.common.persistence.engine.gae.ExecutionTimeLogger
intermediateLogging: 000268 **intermediate** Form.getForms[_form_info]
SELECT * FROM opendatakit._form_info WHERE _URI >=3D
md5:04f2a292201cba8fac41e968e19636e9 ORDER BY _URI
 W 2012-12-05 15:03:39.029
org.opendatakit.common.persistence.engine.gae.ExecutionTimeLogger
wrapUp: 000316 **final** Form.getForms[_form_info]
The **intermediate** entry reports that the given query took 000268 units
to complete, and the **final** reports that the overall time was 000316
units.

By default, the unit threshold for logging long queries is 120 units. You
can use the Datastore Viewer via the appengine dashboard to change that
default up or down, as you see fit.

-----------------
Mitch


On Tue, Feb 19, 2013 at 9:30 PM, Waylon Brunette <wrb@cs.washington.edu>wro=
te:

>  Amarjeet,****
>
> ** **
>
> There is also a timeout if the request takes longer than 60 seconds which
> maybe showing up incorrectly as a quota issue. I assume you looked at you=
r
> appengine control panel when you got it. ****
>
> ** **
>
> Mitch has a bunch of cost logging built in and I don=92t know what is
> enabled or disabled in the current 1.3 release so I am going to let Mitch
> answer the question since he will know what was included in the 1.3 relea=
se.
> ****
>
> ** **
>
> Waylon****
>
> ** **
>
> *From:* Amarjeet Singh [mailto:amarjeet@iiitd.ac.in]
> *Sent:* Tuesday, February 19, 2013 8:21 PM
> *To:* Waylon Brunette
> *Subject:* Appspot quota****
>
> ** **
>
> Dear Waylon****
>
> ** **
>
> In one of our uses of ODK, we got quota error from appspot. We are sure
> that we did not exceed any of the normal quotas.****
>
> ** **
>
> I was wondering if you ever received any such error from your other field
> studies and what could be the suspected reason.****
>
> ** **
>
> We are also thinking of catching the quota exception in ODK and also do
> profiling of the application (I was wondering if you are already doing th=
e
> same)****
>
> ** **
>
> This is all with respect to the released version of ODK.****
>
> ** **
>
> Thank you****
>
> ** **
>
> --
> Best Regards****
>
> ** **
>
> Amarjeet Singh, ****
>
> Asst. Professor, IIIT Delhi****
>
> http://www.iiitd.edu.in/~amarjeet/ ****
>
> ****
>
> ** **
>



--=20
Mitch Sundt
Software Engineer
http://www.OpenDataKit.org <http://www.opendatakit.org/>
University of Washington
mitchellsundt@gmail.com

--089e01493c9897e72904d63fd17d
Content-Type: text/html; charset=windows-1252
Content-Transfer-Encoding: quoted-printable

<div>Adding opendatakit-developers@ to this, as the answers could be of int=
erest to other developers...</div><div><br></div>The error page: &#39;you m=
ay have exceeded quota&#39; is displayed whenever the server has an uncaugh=
t exception or otherwise returns a 500 error (internal server error). It co=
uld have several causes, but the most likely is an over-quota error. There =
is no way to be more specific with this error, as it is using the static er=
ror page to present the error and, by the time you have an over-quota excep=
tion, you can&#39;t reliably execute any java code to diagnose the true cau=
se.<div>
<br></div><div>If the appengine dashboard indicates that the app is not ove=
r-quota (no red bars), and that the app is not currently subject to resourc=
e throttling (this will be a small triangular ! warning just below the Bill=
ing Status heading), then you should examine the Logs for the application (=
from the appengine Dashboard, click on the &#39;Logs&#39; link on the left =
sidebar). Look first for log entries with Critical or Error entries. If non=
e show up, then look at warnings. =A0The key warning to look for is the &#3=
9;your request took longer than 60 seconds, so AppEngine terminated it&#39;=
 warning. =A0Otherwise, any error within the ODK Aggregate code should gene=
rate a Critical or Error entry.</div>
<div><br></div><div>--------------</div><div>As for profiling, I&#39;d be i=
nterested in hearing your findings. Profiling AppEngine is problematic beca=
use you cannot glean any useful information from running in the development=
 environment. =A0ODK Aggregate is a bit odd in that it does not use Memcach=
e because configuring that on Tomcat would have greatly complicated the ins=
taller. Instead, frequently-accessed values are cached within the Java laye=
r and refreshed about every 3-6 seconds.</div>
<div><br></div><div>AppEngine performance is definitely limited to what we =
can do with BigTables datastores without using any indices beyond the defau=
lt one-dimensional indices (this is because our data tables are dynamically=
 constructed, and there is no Java API to dynamically construct composite i=
ndices). There is very little optimization you can do for AppEngine datasto=
re interactions because of this -- the limitations are effectively written =
into the code.</div>
<div><br></div><div>MySQL and PostgreSQL are much more flexible, and databa=
se profiling can be used to create extra indices as needed to tailor and tu=
ne for performance, and those extra indices will be used by the database to=
 improve query performance.</div>
<div><br></div><div>Additionally, MySQL and PostgreSQL databases both provi=
de mechanisms for tracking how many of each type of query or datastore acti=
on (insert/delete) are performed (e.g., CRUD reports, query timing reports)=
. =A0So no instrumentation is provided on that activity within ODK Aggregat=
e.=A0</div>
<div><br></div><div>AppEngine, however, provides no visibility into things =
like CRUD reports or query timing reports.=A0</div><div><br></div><div>To r=
emedy that, code within ODK Aggregate periodically emits the equivalent of =
a CRUD report (independent of the datastore used). =A0This is a set of log =
entries of the form:</div>
<div><li class=3D"ae-logs-applog"><h5>2012-12-05 15:03:38.317=A0<span style=
=3D"font-size:small;font-weight:normal">org.opendatakit.common.persistence.=
engine.DatastoreAccessMetrics logUsage: ---------- 2012-12-05T23:03:38.317+=
0000 @ 3892 ------------</span></h5>

</li>
<li class=3D"ae-logs-applog">
<h5>
<span class=3D"ae-logs-severity ae-logs-severity-1" title=3D"Logging Severi=
ty: Info">
I
</span>
2012-12-05 15:03:38.318 <span style=3D"font-size:small;font-weight:normal">=
org.opendatakit.common.persistence.engine.DatastoreAccessMetrics logUsage: =
TASK_LOCK,0,0,0,0,0</span></h5>
</li>
<li class=3D"ae-logs-applog">
<h5>
<span class=3D"ae-logs-severity ae-logs-severity-1" title=3D"Logging Severi=
ty: Info">
I
</span>
2012-12-05 15:03:38.318=A0<span style=3D"font-size:small;font-weight:normal=
">org.opendatakit.common.persistence.engine.DatastoreAccessMetrics logUsage=
: _COST_LOGGING_,1,1,0,0,0</span></h5>
</li>
<li class=3D"ae-logs-applog">
<h5>
<span class=3D"ae-logs-severity ae-logs-severity-1" title=3D"Logging Severi=
ty: Info">
I
</span>
2012-12-05 15:03:38.318=A0<span style=3D"font-size:small;font-weight:normal=
">org.opendatakit.common.persistence.engine.DatastoreAccessMetrics logUsage=
: _STRING_FIELD_LENGTHS_,0,0,0,0,0</span></h5>
</li>
<li class=3D"ae-logs-applog">
<h5>
<span class=3D"ae-logs-severity ae-logs-severity-1" title=3D"Logging Severi=
ty: Info">
I
</span>
2012-12-05 15:03:38.318=A0<span style=3D"font-size:small;font-weight:normal=
">org.opendatakit.common.persistence.engine.DatastoreAccessMetrics logUsage=
: opendatakit.EXTREMELY_WIDE_FLAT_CORE,0,0,0,0,0</span></h5>
</li>
<li class=3D"ae-logs-applog">
<h5>
<span class=3D"ae-logs-severity ae-logs-severity-1" title=3D"Logging Severi=
ty: Info">
I
</span>
2012-12-05 15:03:38.319=A0<span style=3D"font-size:small;font-weight:normal=
">org.opendatakit.common.persistence.engine.DatastoreAccessMetrics logUsage=
: opendatakit._backend_actions,0,0,6,0,0</span></h5>
</li>
<li class=3D"ae-logs-applog">
<h5>
<span class=3D"ae-logs-severity ae-logs-severity-1" title=3D"Logging Severi=
ty: Info">
I
</span>
2012-12-05 15:03:38.319=A0<span style=3D"font-size:small;font-weight:normal=
">org.opendatakit.common.persistence.engine.DatastoreAccessMetrics logUsage=
: opendatakit._filter_group,0,0,0,0,0</span></h5>
</li>
<li class=3D"ae-logs-applog">
<h5>
<span class=3D"ae-logs-severity ae-logs-severity-1" title=3D"Logging Severi=
ty: Info">
I
</span>
2012-12-05 15:03:38.319=A0<span style=3D"font-size:small;font-weight:normal=
">org.opendatakit.common.persistence.engine.DatastoreAccessMetrics logUsage=
: opendatakit._form_data_model,0,0,0,0,0</span></h5>
</li>
<li class=3D"ae-logs-applog">
<h5>
<span class=3D"ae-logs-severity ae-logs-severity-1" title=3D"Logging Severi=
ty: Info">
I
</span>
2012-12-05 15:03:38.319 o<span style=3D"font-size:small;font-weight:normal"=
>rg.opendatakit.common.persistence.engine.DatastoreAccessMetrics logUsage: =
opendatakit._form_info,4,52,0,0,0</span></h5>
</li>
<li class=3D"ae-logs-applog">
<h5>
<span class=3D"ae-logs-severity ae-logs-severity-1" title=3D"Logging Severi=
ty: Info">
I
</span>
2012-12-05 15:03:38.320=A0<span style=3D"font-size:small;font-weight:normal=
">org.opendatakit.common.persistence.engine.DatastoreAccessMetrics logUsage=
: opendatakit._form_info_fileset,0,0,0,0,0</span></h5>
</li>
<li class=3D"ae-logs-applog">
<h5>
<span class=3D"ae-logs-severity ae-logs-severity-1" title=3D"Logging Severi=
ty: Info">
I
</span>
2012-12-05 15:03:38.320=A0<span style=3D"font-size:small;font-weight:normal=
">org.opendatakit.common.persistence.engine.DatastoreAccessMetrics logUsage=
: opendatakit._form_info_manifest_bin,0,0,0,0,0</span></h5>
</li>
<li class=3D"ae-logs-applog">
<h5>
<span class=3D"ae-logs-severity ae-logs-severity-1" title=3D"Logging Severi=
ty: Info">
I
</span>
2012-12-05 15:03:38.320=A0<span style=3D"font-size:small;font-weight:normal=
">org.opendatakit.common.persistence.engine.DatastoreAccessMetrics logUsage=
: opendatakit._form_info_submission_association,0,0,0,0,0</span></h5>
</li>
<li class=3D"ae-logs-applog">
<h5>
<span class=3D"ae-logs-severity ae-logs-severity-1" title=3D"Logging Severi=
ty: Info">
I
</span>
2012-12-05 15:03:38.320=A0<span style=3D"font-size:small;font-weight:normal=
">org.opendatakit.common.persistence.engine.DatastoreAccessMetrics logUsage=
: opendatakit._form_info_xform_bin,22,22,0,0,0</span></h5>
</li>
<li class=3D"ae-logs-applog">
<h5>
<span class=3D"ae-logs-severity ae-logs-severity-1" title=3D"Logging Severi=
ty: Info">
I
</span>
2012-12-05 15:03:38.320=A0<span style=3D"font-size:small;font-weight:normal=
">org.opendatakit.common.persistence.engine.DatastoreAccessMetrics logUsage=
: opendatakit._form_info_xform_blb,0,0,1,0,0</span></h5>
</li>
<li class=3D"ae-logs-applog">
<h5>
<span class=3D"ae-logs-severity ae-logs-severity-1" title=3D"Logging Severi=
ty: Info">
I
</span>
2012-12-05 15:03:38.321=A0<span style=3D"font-size:small;font-weight:normal=
">org.opendatakit.common.persistence.engine.DatastoreAccessMetrics logUsage=
: opendatakit._form_info_xform_ref,1,1,0,0,0</span></h5>
</li>
<li class=3D"ae-logs-applog">
<h5>
<span class=3D"ae-logs-severity ae-logs-severity-1" title=3D"Logging Severi=
ty: Info">
I
</span>
2012-12-05 15:03:38.321=A0<span style=3D"font-size:small;font-weight:normal=
">org.opendatakit.common.persistence.engine.DatastoreAccessMetrics logUsage=
: opendatakit._form_service_cursor,0,0,0,0,0</span></h5>
</li>
<li class=3D"ae-logs-applog">
<h5>
<span class=3D"ae-logs-severity ae-logs-severity-1" title=3D"Logging Severi=
ty: Info">
I
</span>
2012-12-05 15:03:38.321=A0<span style=3D"font-size:small;font-weight:normal=
">org.opendatakit.common.persistence.engine.DatastoreAccessMetrics logUsage=
: opendatakit._fusion_table,0,0,0,0,0</span></h5>
</li>
<li class=3D"ae-logs-applog">
<h5>
<span class=3D"ae-logs-severity ae-logs-severity-1" title=3D"Logging Severi=
ty: Info">
I
</span>
2012-12-05 15:03:38.321=A0<span style=3D"font-size:small;font-weight:normal=
">org.opendatakit.common.persistence.engine.DatastoreAccessMetrics logUsage=
: opendatakit._fusion_table_repeat,0,0,0,0,0</span></h5>
</li>
<li class=3D"ae-logs-applog">
<h5>
<span class=3D"ae-logs-severity ae-logs-severity-1" title=3D"Logging Severi=
ty: Info">
I
</span>
2012-12-05 15:03:38.322=A0<span style=3D"font-size:small;font-weight:normal=
">org.opendatakit.common.persistence.engine.DatastoreAccessMetrics logUsage=
: opendatakit._granted_authority_hierarchy,1,13,0,0,0</span></h5>
</li>
<li class=3D"ae-logs-applog">
<h5>
<span class=3D"ae-logs-severity ae-logs-severity-1" title=3D"Logging Severi=
ty: Info">
I
</span>
2012-12-05 15:03:38.322=A0<span style=3D"font-size:small;font-weight:normal=
">org.opendatakit.common.persistence.engine.DatastoreAccessMetrics logUsage=
: opendatakit._misc_tasks,0,0,0,0,0</span></h5>
</li>
<li class=3D"ae-logs-applog">
<h5>
<span class=3D"ae-logs-severity ae-logs-severity-1" title=3D"Logging Severi=
ty: Info">
I
</span>
2012-12-05 15:03:38.322=A0<span style=3D"font-size:small;font-weight:normal=
">org.opendatakit.common.persistence.engine.DatastoreAccessMetrics logUsage=
: opendatakit._persistent_result_file_bin,0,0,0,0,0</span></h5>
</li>
<li class=3D"ae-logs-applog">
<h5>
<span class=3D"ae-logs-severity ae-logs-severity-1" title=3D"Logging Severi=
ty: Info">
I
</span>
2012-12-05 15:03:38.322=A0<span style=3D"font-size:small;font-weight:normal=
">org.opendatakit.common.persistence.engine.DatastoreAccessMetrics logUsage=
: opendatakit._persistent_results,0,0,0,0,0</span></h5>
</li>
<li class=3D"ae-logs-applog">
<h5>
<span class=3D"ae-logs-severity ae-logs-severity-1" title=3D"Logging Severi=
ty: Info">
I
</span>
2012-12-05 15:03:38.322=A0<span style=3D"font-size:small;font-weight:normal=
">org.opendatakit.common.persistence.engine.DatastoreAccessMetrics logUsage=
: opendatakit._registered_users,1,1,2,0,0</span></h5>
</li>
<li class=3D"ae-logs-applog">
<h5>
<span class=3D"ae-logs-severity ae-logs-severity-1" title=3D"Logging Severi=
ty: Info">
I
</span>
2012-12-05 15:03:38.323=A0<span style=3D"font-size:small;font-weight:normal=
">org.opendatakit.common.persistence.engine.DatastoreAccessMetrics logUsage=
: opendatakit._security_revisions,0,0,7,0,0</span></h5>
</li>
<li class=3D"ae-logs-applog">
<h5>
<span class=3D"ae-logs-severity ae-logs-severity-1" title=3D"Logging Severi=
ty: Info">
I
</span>
2012-12-05 15:03:38.323=A0<span style=3D"font-size:small;font-weight:normal=
">org.opendatakit.common.persistence.engine.DatastoreAccessMetrics logUsage=
: opendatakit._server_preferences,0,0,0,0,0</span></h5>
</li>
<li class=3D"ae-logs-applog">
<h5>
<span class=3D"ae-logs-severity ae-logs-severity-1" title=3D"Logging Severi=
ty: Info">
I
</span>
2012-12-05 15:03:38.323=A0<span style=3D"font-size:small;font-weight:normal=
">org.opendatakit.common.persistence.engine.DatastoreAccessMetrics logUsage=
: opendatakit._user_granted_authority,2,2,0,0,0</span></h5>
</li>
<li class=3D"ae-logs-applog">
<h5>
<span class=3D"ae-logs-severity ae-logs-severity-1" title=3D"Logging Severi=
ty: Info">
I
</span>
2012-12-05 15:03:38.323=A0<span style=3D"font-size:small;font-weight:normal=
">org.opendatakit.common.persistence.engine.DatastoreAccessMetrics logUsage=
: -----------------------------------------</span></h5></li></div><div>The =
comma-separated numbers are reset to zero after this report is logged, and =
the 5 values correspond to:</div>
<div><br></div><div><ol><li>queries issued,=A0</li><li>rows of query result=
s returned,=A0</li><li>count of gets (query by-primary-key),=A0</li><li>cou=
nt of puts (insert/update),=A0</li><li>counts of deletes</li></ol></div><di=
v><br>
</div><div>These are reported against each table in the datastore (the stri=
ng after logUsage: and before the string of numbers).</div><div>They are re=
ported for all datastores, so you should not see any significant variation =
in these numbers when migrating from AppEngine to MySQL or PostgreSQL.</div=
>
<div><br></div><div>-----------</div><div>To get the AppEngine-equivalent f=
unctionality to a longest-query report on MySQL or PostgreSQL, there is a c=
ost logging feature within ODK Aggregate (and only within the AppEngine dat=
astore).</div>
<div>If any query takes longer than the value of the COST_LOGGING_MEGACYCLE=
_THRESHOLD in the _COST_LOGGING_ table, then ODK Aggregate will emit a log =
message with the query and the time the query took. These are logged as War=
nings to the log, and are the most common warnings you&#39;ll see in the lo=
g.</div>
<div><br></div><div>An example of this is:</div><div>
<li class=3D"ae-logs-applog">
<h5>
<span class=3D"ae-logs-severity ae-logs-severity-2" title=3D"Logging Severi=
ty: Warning">
W
</span>
2012-12-05 15:03:39.029=A0<span style=3D"font-size:small;font-weight:normal=
">org.opendatakit.common.persistence.engine.gae.ExecutionTimeLogger interme=
diateLogging: 000268 **intermediate** Form.getForms[_form_info] SELECT * FR=
OM opendatakit._form_info WHERE _URI &gt;=3D md5:04f2a292201cba8fac41e968e1=
9636e9 ORDER BY _URI</span></h5>

</li>
<li class=3D"ae-logs-applog">
<h5>
<span class=3D"ae-logs-severity ae-logs-severity-2" title=3D"Logging Severi=
ty: Warning">
W
</span>
2012-12-05 15:03:39.029=A0<span style=3D"font-size:small;font-weight:normal=
">org.opendatakit.common.persistence.engine.gae.ExecutionTimeLogger wrapUp:=
 000316 **final** Form.getForms[_form_info]</span></h5></li></div><div>The =
**intermediate** entry reports that the given query took 000268 units to co=
mplete, and the **final** reports that the overall time was 000316 units.</=
div>
<div><br></div><div>By default, the unit threshold for logging long queries=
 is 120 units. You can use the Datastore Viewer via the appengine dashboard=
 to change that default up or down, as you see fit.</div><div><br></div>
<div>-----------------</div><div>Mitch</div><div><br></div><div><br></div><=
div><div><div class=3D"gmail_quote">On Tue, Feb 19, 2013 at 9:30 PM, Waylon=
 Brunette <span dir=3D"ltr">&lt;<a href=3D"mailto:wrb@cs.washington.edu" ta=
rget=3D"_blank">wrb@cs.washington.edu</a>&gt;</span> wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">





<div lang=3D"EN-US" link=3D"blue" vlink=3D"purple">
<div>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt;font-family:&quot;Ca=
libri&quot;,&quot;sans-serif&quot;;color:#1f497d">Amarjeet,<u></u><u></u></=
span></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt;font-family:&quot;Ca=
libri&quot;,&quot;sans-serif&quot;;color:#1f497d"><u></u>=A0<u></u></span><=
/p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt;font-family:&quot;Ca=
libri&quot;,&quot;sans-serif&quot;;color:#1f497d">There is also a timeout i=
f the request takes longer than 60 seconds which maybe showing up incorrect=
ly as a quota issue. I assume you looked at your appengine
 control panel when you got it. <u></u><u></u></span></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt;font-family:&quot;Ca=
libri&quot;,&quot;sans-serif&quot;;color:#1f497d"><u></u>=A0<u></u></span><=
/p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt;font-family:&quot;Ca=
libri&quot;,&quot;sans-serif&quot;;color:#1f497d">Mitch has a bunch of cost=
 logging built in and I don=92t know what is enabled or disabled in the cur=
rent 1.3 release so I am going to let Mitch answer the question
 since he will know what was included in the 1.3 release.<u></u><u></u></sp=
an></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt;font-family:&quot;Ca=
libri&quot;,&quot;sans-serif&quot;;color:#1f497d"><u></u>=A0<u></u></span><=
/p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt;font-family:&quot;Ca=
libri&quot;,&quot;sans-serif&quot;;color:#1f497d">Waylon<u></u><u></u></spa=
n></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt;font-family:&quot;Ca=
libri&quot;,&quot;sans-serif&quot;;color:#1f497d"><u></u>=A0<u></u></span><=
/p>
<p class=3D"MsoNormal"><b><span style=3D"font-size:10.0pt;font-family:&quot=
;Tahoma&quot;,&quot;sans-serif&quot;">From:</span></b><span style=3D"font-s=
ize:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;"> Amarjeet=
 Singh [mailto:<a href=3D"mailto:amarjeet@iiitd.ac.in" target=3D"_blank">am=
arjeet@iiitd.ac.in</a>]
<br>
<b>Sent:</b> Tuesday, February 19, 2013 8:21 PM<br>
<b>To:</b> Waylon Brunette<br>
<b>Subject:</b> Appspot quota<u></u><u></u></span></p>
<p class=3D"MsoNormal"><u></u>=A0<u></u></p>
<p class=3D"MsoNormal">Dear Waylon<u></u><u></u></p>
<div>
<p class=3D"MsoNormal"><u></u>=A0<u></u></p>
</div>
<div>
<p class=3D"MsoNormal">In one of our uses of ODK, we got quota error from a=
ppspot. We are sure that we did not exceed any of the normal quotas.<u></u>=
<u></u></p>
</div>
<div>
<p class=3D"MsoNormal"><u></u>=A0<u></u></p>
</div>
<div>
<p class=3D"MsoNormal">I was wondering if you ever received any such error =
from your other field studies and what could be the suspected reason.<u></u=
><u></u></p>
</div>
<div>
<p class=3D"MsoNormal"><u></u>=A0<u></u></p>
</div>
<div>
<p class=3D"MsoNormal">We are also thinking of catching the quota exception=
 in ODK and also do profiling of the application (I was wondering if you ar=
e already doing the same)<u></u><u></u></p>
</div>
<div>
<p class=3D"MsoNormal"><u></u>=A0<u></u></p>
</div>
<div>
<p class=3D"MsoNormal">This is all with respect to the released version of =
ODK.<u></u><u></u></p>
</div>
<div>
<p class=3D"MsoNormal"><u></u>=A0<u></u></p>
</div>
<div>
<p class=3D"MsoNormal">Thank you<span class=3D"HOEnZb"><font color=3D"#8888=
88"><u></u><u></u></font></span></p><span class=3D"HOEnZb"><font color=3D"#=
888888">
<div>
<div>
<p class=3D"MsoNormal"><u></u>=A0<u></u></p>
</div>
<p class=3D"MsoNormal">-- <br>
Best Regards<u></u><u></u></p>
<div>
<p class=3D"MsoNormal"><u></u>=A0<u></u></p>
<div>
<p class=3D"MsoNormal">Amarjeet Singh,=A0<u></u><u></u></p>
</div>
<div>
<p class=3D"MsoNormal">Asst. Professor, IIIT Delhi<u></u><u></u></p>
</div>
<div>
<p class=3D"MsoNormal"><a href=3D"http://www.iiitd.edu.in/~amarjeet/" targe=
t=3D"_blank">http://www.iiitd.edu.in/~amarjeet/</a>=A0<u></u><u></u></p>
<div>
<p class=3D"MsoNormal"><img border=3D"0" width=3D"200" height=3D"50" src=3D=
"http://www.iiitd.ac.in/sites/default/files/images/graphicidentity/logo/sty=
le3colorsmall.jpg"><u></u><u></u></p>
<div>
<p class=3D"MsoNormal"><u></u>=A0<u></u></p>
</div>
</div>
</div>
</div>
</div>
</font></span></div>
</div>
</div>

</blockquote></div><br><br clear=3D"all"><div><br></div>-- <br>Mitch Sundt<=
br>
Software Engineer<br>
<a href=3D"http://www.opendatakit.org/" target=3D"_blank">http://www.OpenDa=
taKit.org</a><br>
University of Washington<br>
<a href=3D"mailto:mitchellsundt@gmail.com" target=3D"_blank">mitchellsundt@=
gmail.com</a><br>
<br>

</div></div>

--089e01493c9897e72904d63fd17d--

Posts: 4

Participants: 2

Read full topic

Search Help options — have they gone?

RSS posts by some author(s) only in a single topic

$
0
0

@meglio wrote:

Is it possible to build an RSS feed for a single or a few specified authors only in a single topic?

There is a button to find author's posts only in a topic, but that does not change the current URL.

Posts: 1

Participants: 1

Read full topic

Title for new users

$
0
0

@nixie wrote:

Hi,

How to pre-allocate title to new users?

I have tried adding title to users manually using the admin panel - and that works.
I also know that if we create a new group, we can specify a default title for all users in the group.

But that isn't what I'm looking for.
The new users who register in the site do not really belong to any group by default.
So, I'm not sure how to go about giving them a default title

@team Please assist.

Thanks

Posts: 1

Participants: 1

Read full topic

UndefinedConversionError when viewing rejected mails

$
0
0

@fefrei wrote:

In Discourse 1.8.0.beta12, I can no longer view the content of rejected mails on /admin/email/rejected. Clicking the rejection reason causes a request to /admin/email/incoming/<id>.json?_=<token> which fails with a 500 Internal Server Error.

The following error is logged:

Encoding::UndefinedConversionError ("\xC3" from ASCII-8BIT to UTF-8)
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/core_ext/object/json.rb:34:in
encode'`

This is the backtrace:

/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/core_ext/object/json.rb:34:in `encode'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/core_ext/object/json.rb:34:in `to_json'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/core_ext/object/json.rb:34:in `to_json_with_active_support_encoder'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/json/encoding.rb:57:in `to_json'
/usr/local/lib/ruby/2.3.0/json/common.rb:224:in `generate'
/usr/local/lib/ruby/2.3.0/json/common.rb:224:in `generate'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/json/encoding.rb:101:in `stringify'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/json/encoding.rb:35:in `encode'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/json/encoding.rb:22:in `encode'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/core_ext/object/json.rb:37:in `to_json_with_active_support_encoder'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/active_model_serializers-0.8.3/lib/active_model/serializer.rb:333:in `to_json'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/multi_json-1.12.1/lib/multi_json/adapters/oj.rb:21:in `dump'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/multi_json-1.12.1/lib/multi_json/adapters/oj.rb:21:in `dump'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/multi_json-1.12.1/lib/multi_json/adapter.rb:25:in `dump'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/multi_json-1.12.1/lib/multi_json.rb:139:in `dump'
/var/www/discourse/app/controllers/application_controller.rb:325:in `render_json_dump'
/var/www/discourse/app/controllers/admin/email_controller.rb:115:in `incoming'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_controller/metal/implicit_render.rb:4:in `send_action'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/abstract_controller/base.rb:198:in `process_action'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_controller/metal/rendering.rb:10:in `process_action'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/abstract_controller/callbacks.rb:20:in `block in process_action'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/callbacks.rb:117:in `call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/callbacks.rb:555:in `block (2 levels) in compile'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/callbacks.rb:505:in `call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/callbacks.rb:92:in `__run_callbacks__'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/callbacks.rb:778:in `_run_process_action_callbacks'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/callbacks.rb:81:in `run_callbacks'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/abstract_controller/callbacks.rb:19:in `process_action'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_controller/metal/rescue.rb:29:in `process_action'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_controller/metal/instrumentation.rb:32:in `block in process_action'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/notifications.rb:164:in `block in instrument'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/notifications.rb:164:in `instrument'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_controller/metal/instrumentation.rb:30:in `process_action'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_controller/metal/params_wrapper.rb:250:in `process_action'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.8/lib/active_record/railties/controller_runtime.rb:18:in `process_action'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/abstract_controller/base.rb:137:in `process'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/actionview-4.2.8/lib/action_view/rendering.rb:30:in `process'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_controller/metal.rb:196:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_controller/metal.rb:237:in `block in action'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/routing/route_set.rb:74:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/routing/route_set.rb:43:in `serve'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/routing/mapper.rb:49:in `serve'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/journey/router.rb:43:in `block in serve'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/journey/router.rb:30:in `each'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/journey/router.rb:30:in `serve'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/routing/route_set.rb:817:in `call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/rack-protection-1.5.3/lib/rack/protection/frame_options.rb:31:in `call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/omniauth-1.6.1/lib/omniauth/strategy.rb:189:in `call!'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/omniauth-1.6.1/lib/omniauth/strategy.rb:167:in `call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/omniauth-1.6.1/lib/omniauth/strategy.rb:189:in `call!'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/omniauth-1.6.1/lib/omniauth/strategy.rb:167:in `call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/omniauth-1.6.1/lib/omniauth/strategy.rb:189:in `call!'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/omniauth-1.6.1/lib/omniauth/strategy.rb:167:in `call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/omniauth-1.6.1/lib/omniauth/strategy.rb:189:in `call!'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/omniauth-1.6.1/lib/omniauth/strategy.rb:167:in `call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/omniauth-1.6.1/lib/omniauth/strategy.rb:189:in `call!'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/omniauth-1.6.1/lib/omniauth/strategy.rb:167:in `call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/omniauth-1.6.1/lib/omniauth/strategy.rb:189:in `call!'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/omniauth-1.6.1/lib/omniauth/strategy.rb:167:in `call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/omniauth-1.6.1/lib/omniauth/builder.rb:63:in `call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/rack-1.6.5/lib/rack/conditionalget.rb:25:in `call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/rack-1.6.5/lib/rack/head.rb:13:in `call'
/var/www/discourse/lib/middleware/anonymous_cache.rb:138:in `call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/middleware/params_parser.rb:27:in `call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/middleware/flash.rb:260:in `call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/rack-1.6.5/lib/rack/session/abstract/id.rb:225:in `context'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/rack-1.6.5/lib/rack/session/abstract/id.rb:220:in `call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/middleware/cookies.rb:560:in `call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.8/lib/active_record/query_cache.rb:36:in `call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.8/lib/active_record/connection_adapters/abstract/connection_pool.rb:653:in `call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/callbacks.rb:88:in `__run_callbacks__'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/callbacks.rb:778:in `_run_call_callbacks'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/callbacks.rb:81:in `run_callbacks'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/middleware/callbacks.rb:27:in `call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/middleware/remote_ip.rb:78:in `call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/logster-1.2.7/lib/logster/middleware/reporter.rb:31:in `call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/railties-4.2.8/lib/rails/rack/logger.rb:38:in `call_app'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/railties-4.2.8/lib/rails/rack/logger.rb:22:in `call'
/var/www/discourse/config/initializers/100-quiet_logger.rb:17:in `call_with_quiet_assets'
/var/www/discourse/config/initializers/100-silence_logger.rb:29:in `call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/middleware/request_id.rb:21:in `call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/rack-1.6.5/lib/rack/methodoverride.rb:22:in `call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/rack-1.6.5/lib/rack/runtime.rb:18:in `call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/rack-1.6.5/lib/rack/sendfile.rb:113:in `call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/message_bus-2.0.2/lib/message_bus/rack/middleware.rb:62:in `call'
/var/www/discourse/lib/middleware/request_tracker.rb:73:in `call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/railties-4.2.8/lib/rails/engine.rb:518:in `call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/railties-4.2.8/lib/rails/application.rb:165:in `call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/railties-4.2.8/lib/rails/railtie.rb:194:in `public_send'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/railties-4.2.8/lib/rails/railtie.rb:194:in `method_missing'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/rack-1.6.5/lib/rack/urlmap.rb:66:in `block in call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/rack-1.6.5/lib/rack/urlmap.rb:50:in `each'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/rack-1.6.5/lib/rack/urlmap.rb:50:in `call'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/unicorn-5.3.0/lib/unicorn/http_server.rb:606:in `process_client'
/var/www/discourse/lib/scheduler/defer.rb:85:in `process_client'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/unicorn-5.3.0/lib/unicorn/http_server.rb:702:in `worker_loop'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/unicorn-5.3.0/lib/unicorn/http_server.rb:549:in `spawn_missing_workers'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/unicorn-5.3.0/lib/unicorn/http_server.rb:142:in `start'
/var/www/discourse/vendor/bundle/ruby/2.3.0/gems/unicorn-5.3.0/bin/unicorn:126:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/2.3.0/bin/unicorn:22:in `load'
/var/www/discourse/vendor/bundle/ruby/2.3.0/bin/unicorn:22:in `<main>'

Posts: 1

Participants: 1

Read full topic

Adding MD Navigation Bar

Error in Discourse install in Linode

$
0
0

@Md_Ziaoul_Hoque1 wrote:

I have installed Discourse in Linode using instructions here. https://crunchify.com/how-to-setup-discourse-org-forum-on-linode-correct-way-tested-and-verified-steps

But when I try to rebuild the installation (./launcher rebuild app) it shows the following errors:

FAILED

Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with return #
Location of failure: /pups/lib/pups/exec_command.rb:108:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"bundle_exec", "cmd"=>["su discourse -c 'bundle install --deployment --verbose --without test --without development'", "su discourse -c 'bundle exec rake db:migrate'", "su discourse -c 'bundle exec rake assets:precompile'"]}
057c39eb0ee28a5d15a9c987b2badb218f4483f8fd65940decf7f0b302f20530
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one

Posts: 8

Participants: 3

Read full topic


User list can not be displayed

$
0
0

@atozsoft wrote:

hi,

i already have some user but user list is empty and User list can not be displayed. thanks

Posts: 3

Participants: 2

Read full topic

Why does discourse take up so much disk space?

$
0
0

@wiliamjoaquim wrote:

I have a Discourse directory installed on Digita Ocean, it has only 600 members and 160 topics and it already has 13 GB in Digital Ocean, would you like to know how I can help reduce consumption?

Posts: 3

Participants: 3

Read full topic

In admin's email history, what does fa-repeat represent?

$
0
0

@watchmanmonitor wrote:

When looking at the email logs, I found a fa-repeat icon next to some messages.

I don't know if emails were bouncing then, but no admin has "fixed" his the user's account?

the icons aren't wired up to an action button (anymore?)

What do they stand for?

Posts: 1

Participants: 1

Read full topic

Constantly hitting rubygems rate limits

$
0
0

@Mooash wrote:

When bootstrapping new Discourse containers I'm constantly hitting the https://rubygems.org rate limits.

I've tried setting up gemstash instance but even that doesn't help enough it seems. Is there anyway to cache more rubygems data locally when bootstrapping containers?

Posts: 4

Participants: 2

Read full topic

Install Discourse-affiliate plugin on my forum

$
0
0

@Jesse_Plautz wrote:

What would you like done?
I want to transform keywords in the text of users into links that go to my affiliate accounts. Most of the conversation about this plugin is around Amazon links. I don't have Amazon links on my forum, so I'd like to transform specific keywords with varying affiliate codes. For instance I have POS system affiliate link for "Clover POS" and a wholesale account for "XYZ Wholesale".

When do you need it done?
30 days

What is your budget, in $ USD that you can offer for this task?
I have a budget of about $75, but I'd like to hear any quotes.

Posts: 1

Participants: 1

Read full topic

Rebuild app hangs

$
0
0

@rimian wrote:

My staging server hangs when I rebuild it. Previously it was working OK:

DEBUG -- : Delivering messages [] to client xxxxxxxx for user 1 (chunked)

What would this be?

Posts: 1

Participants: 1

Read full topic

Discourse Moderation Guide

$
0
0

@jomaxro wrote:

So you're a moderator on a Discourse forum - congratulations! As a forum moderator, it's your role to help oversee the forum, ensuring that users and content are in line with your TOS, FAQ, and other published rules/guidelines. Discourse provides comes with numerous tools to help you accomplish this.

Let's take a look at some common scenarios and see how each can be handled with Discourse.

Welcoming New Users

Part of keeping a community friendly and helping it grow involves being an example to others. When you notice a new user on the site (many times evidenced by a light-grey username instead of dark-grey, which shows that a user is Trust Level 0), say hi and welcome them to the site. Even if you have nothing else to say, that initial interaction is important for new members to feel welcomed.

The Difficult User

Most users will be respectful, post appropriate content, and not cause any issues. However, you may encounter a user that just doesn't want to follow the rules, is rude, posts inappropriate material, etc. How can you handle them? Keep in mind, the below progression is a suggestion. There may be instances where one of the steps doesn't make sense or the action was so egregious that a step (or steps) are skipped.

Don't make assumptions

First, try to avoid assuming that the user has a negative intent. They may simply be ignorant of the rules, may not speak your forums language well, may be young, or have another reason for the way they act.

Reach out directly

Try to contact the user privately via PM to let them know what is wrong with their behavior. Remember to talk about the negative behaviors - don't attack the user themselves. When possible, link to existing rules, guidelines, FAQs, or similar.

In most cases, this contact will be enough. However, if it is not...

Send an official warning

When sending a PM to a user as a moderator, you can make the message an "official warning". This PM will automatically gain staff color, and a notice that the user has received an official warning will appear on the user profile for other moderators to see.

In the official warning, be sure to explain the negative behavior you have seen, detail specifically what you'd like them to do instead, and the consequences of not changing their behavior.

If the behavior continues, be sure to follow through with the listed consequences. You may choose to...

Block the user

Blocked users are prevented from creating new topics, replies, or PMs on the site. They are still able to complete other actions, like "liking" posts, reading topics, etc. Additionally, they can communicate with moderators via PM, so you can continue to communicate with them to try and address the behavior.

Blocking a user is done from the user's Admin page. To access it:

Navigate to the user's profile, click Admin, then click Block.

Once blocked, a user must be manually unblocked to be able to resume posting. When blocking a user, explain to them what they need to do before they can be unblocked.

If the behavior still continues...

Suspend the user

Suspended users are prevented from logging in, and thus from completing any actions on the forums. A suspension is the strongest possible recourse you have for a user and should be used sparingly. Like blocking, suspending a user is done from the user's Admin page. Unlike blocking, suspensions are for a specific period of time. You may want to suspend the user for a short period of time first, and if the user returns and continues the behavior, increase the suspension time.

Locking trust level

If a user posts too much, includes too many and/or inappropriate images, abuses the flag system, or similar an alternate to the above is locking the user to trust level 0. This will limit the number (and frequency) of topics and posts the user can create, as well as prevent them from including too many images/links and prevent the user from casting flags. Trust levels can be configured from the user's Admin page.

Inappropriate Content

Discourse allows all users to help keep the forums clean, appropriate, and on-topic via the Flag system. When a topic or post is seen that does not belong, users and moderators can flag it for review.

Flags

Flags can be your best friend or the entrance to a rabbit hole. When a user doesn't like a post, they can choose to flag it for us. The flag dialog has 5 options: message user (does not cause a flag, simply opens up the PM dialog), off-topic, inappropriate, spam, and something else. Off-topic, inappropriate, and spam simply cast a flag, and the user is done. Something else allows for a custom message and then casts the flag. Once a flag is in the queue, moderators will see a red notification on the hamburger menu and can open the flag queue. From there, you can decide what to do about the flag. There will be 3 options: Agree, Disagree, and Defer. Agreeing with the flag signals that you confirm the post is off-topic (or spam, or inappropriate, or ...). You can then message the user to edit it (automated message, no option to customize), or delete the post. Disagreeing with the flag says that the post is not an issue, and there is nothing to do. Defer means the flag doesn't need further action. For example, a user might flag their own post if they need help with something. You would then defer the flag so it doesn't hurt their trust level. Agreeing will hurt their trust because their post was flagged, disagreeing may eventually hurt it because a moderator disagreed with their flag (disagree trust level impact is not developed yet). If you are ever uncertain about which option to choose, pick defer and handle the post manually.

You might be wondering why flags can be the entrance to a rabbit hole. 99% of the time flags are easy to handle - the post is clearly spam, a user needs some help, etc. However, sometimes the issue can be harder to address. Maybe a user is continually swearing in their posts and abusing others after being warned. Maybe the request isn't easy to solve. In those cases, don't be afraid to reach out to your fellow moderators, or the forum owners for advice and support. Unless you are the only moderator, you shouldn't ever feel like you have to make a decision on your own, that's why you have a team. At the same time, don't hesitate to make your own decisions - you were made a moderator because you are trusted to do the right thing.

Complicated Topics

Public discussion on Discourse takes place inside of topics. Each topic has a title and category, and it is important that the discussion within relates to the title/category.

Poor title/incorrect category

If users provide a poor title or select the wrong category, you can edit the topic to update one or both. Scroll to the top of the topic and click the pencil next to the title. From there, the title and category can be modified.

Off-topic digression

Topics, especially longer ones have a tendency to veer off-topic. When this happens, you can select posts to move to a new topic or an existing topic on the subject. This helps keep each topic organized and "on-topic".

Duplicate topic

Sometimes users will start a new topic when one already exists. If the posts in the duplicate topic add to the discussion, they can be moved to the existing one. Moving all posts in a topic will automatically close the topic.

Heated, difficult, non-productive discussion

If discussion in a topic is no longer productive or discussion is no longer focused on the topic, but instead on "attacking" other users instead of ideas, moderators should step in.

Make a staff post. Many times, a simple reminder is enough to solve the issue. You can create a post reminding users to be polite, warn them they're talking in circles, etc, and then use the post admin wrench to mark the post a staff post. This indicates to users that the post is the official position of the site.

Set a topic timer. If the staff post doesn't help, or discussion seems so heated that a reminder won't help, you can "pause" the topic. Use the topic admin wrench to set a topic timer for auto-open. This will immediately close the topic, preventing new posts, and display a notice when the topic will reopen.

Getting User Information

Discourse maintains information on all users who register and interact with the site.

Public profile

You can get an overview of a user from their public profile. To access a profile click the user's avatar or username in a topic, their avatar in the topic list, or search for them. Above their profile is a count of official warnings, suspensions, flags received, and helpful flags given by the user. Just below are details on the user's account: when they last visited, posted, and registered.

You can review all public activity by the user, as well as review the notifications they received. If you are also an Admin, you will have access to the user's private messages as well.

You can also view and modify the user's preferences. This can be very helpful if a user is reporting an issue with their account that you suspect may be related to a preference change.

User admin page

From a user's public profile you can access the user's Admin page.

The Admin page can also be accessed from the hamburger menu, and then by clicking on Users. There you can search for users by username, email, or full name. Once opened, you can review additional details about the user, including non-public information like their registration and last-used IP address. IP information can be helpful if a user appears suspicious or acts too similar to another user. As mentioned in "The Difficult User" section, this is also where users can be blocked/suspended, and their trust level adjusted.

Helpful Users

Most users are good citizens on the forums, and will do their best to participate properly. Some users, however, will go above and beyond what is expected. It is to your advantage to recognize these users and encourage the to keep doing what they do. Active helpful users may reach TL3, which allows them to help edit titles and change topic categories. Users can also be manually promoted to TL4, which grants them global edit privileges on any topic or post they can see.

Posts: 5

Participants: 4

Read full topic


Including a member first/surname in any email

Gender neutral German translation

$
0
0

@zking wrote:

Hi, we're planning to do a gender neutral German translation of discourse, based on the "official" German translation. Can anybody tell me, how we can achieve this? Is there a way to use Transifex, or is it smart to edit the YAML file directly? Can we commit our version to Github, so others can use it? Of course we also want to make sure, that we can keep the gender neutral translation up to date as discourse evolves.
thank you, zking

Posts: 4

Participants: 3

Read full topic

Update my SMTP SETTINGS

$
0
0

@nnamso_ wrote:

How can i update my SMTP settings that i used during installation of discourse just incase i missed anything that makes my mail not to deliver.
http://share.mytestimony.com.ng/

Server: smtp.mailgun.org
ports 587
email address "postmaster@share.mytestimony.com.ng" as login username

Posts: 10

Participants: 3

Read full topic

[Paid] Prune Spam users

$
0
0

@treb0r wrote:

What would you like done?

Remove spam users from discourse. Specifically, remove users if not logged in for a year and never posted.

When do you need it done?

ASAP

What is your budget, in $ USD that you can offer for this task?

Please give me a quote!

Posts: 10

Participants: 5

Read full topic

Let a user disable badge notifications

$
0
0

@willwhite wrote:

I'm disappointed whenever a notification turns out to be a badge notification when I'm expecting a reply notification. I would like to be able to turn badge notifications off.

Posts: 5

Participants: 4

Read full topic

Viewing all 60721 articles
Browse latest View live




Latest Images