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

Books on community building

0
0

@dosch wrote:

In the post explaining "What do user trust levels do?" @codinghorror references the book 'Communtiy building on the web'.

I just started reading it and found it very useful on a meta level. Sadly the examples used are grosly outdated as the book is from 2000. (geocities is used as a prima example of how a thriving community works :smiley: )

One nice other book I found myself is The Art of Community Building by Jono Bacon

So I was wondering which books people like and found useful to learn the art of online community building.

Posts: 4

Participants: 4

Read full topic


A question regarding iOS shortcut

0
0

@grxninesix wrote:

Hi Discourse!

I have create a homescreen shortcut to access directly into the Infinite flight Community forum but when i'm in the "false" app, i can't navigate to the previous page.

And when i exit the app or switch in another app then i open new time my shortcut, he start at the community.infinite-flight.com, the default link..

Its a iOS issue or another thing?

sorry for my bad english and if is it duplicate :slightly_smiling:

i'm a very very frequent user of Infninite Flight Community (signup aug'15, 98/100 days visited)

Posts: 3

Participants: 2

Read full topic

RSS items id changed?

0
0

@CamilleRoux wrote:

Hi,

I updated my discourse instance yesterday. Since the update, dlvr.it (a tool to tweet a RSS feed) is posting old tweets.
Have you changed the id of the RSS items?

Posts: 3

Participants: 2

Read full topic

API create user response

0
0

@Raul_Speroni wrote:

Hi,

I'm trying to use discourse api from java for creating a user.
It must be simple, and i know it is probably a java issue and not an api issue, but i can´t get it to work.

When sending post request, i get this response:

{"success":true,"active":false,"message":"\u003cp\u003e¡Ya casi has terminado! Te enviamos un correo de activación a \u003cb\u003epepe@email.uy\u003c/b\u003e. Por favor sigue las instrucciones de ese correo para activar tu cuenta.\u003c/p\u003e\u003cp\u003eSi no llega, mira en la carpeta de spam, o intenta iniciar sesión de nuevo para enviar de nuevo otro correo de activación.\u003c/p\u003e"}

But if i do the same thing from a rest client i do get user_id and everything else... would you point out what am i doing wrong?

Thank you.

I'm running latest version of discourse, i'm issuing requests with an admin api_key.

Posts: 1

Participants: 1

Read full topic

Unable to select posts to move after clicking wrench, select posts

0
0

@tobiaseigen wrote:

One of my moderators pointed out a weird bug - it's no longer possible for me as admin or her as moderator to select individual posts to move them, after clicking on the wrench and "select posts". Take a look at the screenshot below. The blue select boxes in the gutter next to posts no longer are present.

I updated yesterday and then again this morning to the very latest. Now am at v1.5.0.beta11 +14.

Posts: 7

Participants: 4

Read full topic

Weekly digest sent 12 days after last visit

0
0

@mcwumbly wrote:

A user on our forum forwarded me the digest he received today (February 22nd):

It says "A brief summary since your last visit on February 10"

His preference is set to receive weekly digests.

Any idea why it'd take 12 days to send that digest?

Is there some other logic in play here that I don't understand or is this a bug?

Posts: 4

Participants: 3

Read full topic

Use Google Cloud Storage Instead of S3

0
0

@yyhmsg wrote:

I saw another post about this from '14 - but no answer and it seemed like they were making this harder than it should be....

I would like some pointers to see if there is an AWS endpoint configuration within app.yml which could be changed to allow use of google cloud storage instead of s3 - GCS has a compatability mode where all - as I understand it - would need to happen is to change the AWS endpoint:

https://cloud.google.com/storage/docs/migrating

In your existing tools or libraries, make the following changes:
Change the request endpoint to use the Google Cloud Storage request endpoint.
Replace the Amazon Web Services (AWS) access and secret key with the corresponding Google Cloud Storage access key and secret key (collectively called your Google developer key).

This could be added as an option under /admin/site_settings/category/files and option for AWS endpoint along with the access keys? or can it be done in the app.yml? [AWS_ENDPOINT = "/xxxx/xxx"] already?

Thanks!

Posts: 1

Participants: 1

Read full topic

In bulleted list of mentioned tags, last tag is not formatted correctly as a link

0
0

@tobiaseigen wrote:

One for @tgxworld .. check it out - this bulleted list:

- #docker::tag
- #css::tag
- #moderation::tag

looks like this - note the last item is not formatted properly.

I also noticed that on my site a tag was created with a + in it, e.g. #m+e which is apparently possible but mentioning it is not possible.

Posts: 2

Participants: 2

Read full topic


Last "Page" of Default Posts

0
0

@Rob_Waters wrote:

Our forums include these posts by default:

  • FAQ / Guidelines
  • Privacy Policy
  • Terms of Service

It seems that once I've read them, clicking on them takes me to the last "page" by default (bottom of each post):

/t/faq-guidelines/5
/t/privacy-policy/6
/t/terms-of-service/4

I would prefer that clicking on these post titles always takes a user to the top of the post. Is there a way to make that happen?

Posts: 2

Participants: 2

Read full topic

A new versioned API for client side plugins

0
0

@eviltrout wrote:

Later today I am going to be merging our new post rendering engine into master. Swapping out Ember/HTMLBars for a virtual-dom based renderer provides us with a huge performance increase, but it also has the side effect of being incompatible with how plugins were previously made.

While doing this work, it occurred to me that we made a fairly big mistake in the past by not providing a mechanism for versioning the public APIs used by client side code. We used to encourage people to just dump in whatever Javascript they wanted in an Ember initializer, which works great and is fast to develop, but it has major issues if we ever want to deprecate or update those APIs.

The good news is the latest version of Discourse has a new versioned API for plugins and extensibility. The bad news is most plugins will need to be updated.

To ease in this transition, I spent the last two weeks going through the most popular discourse plugins and updating them so that they'd be compatible with both versions of discourse. If your plugin was open source, you might have received a pull request from me! If you are a plugin author, please check your plugin against the tests-passed of discourse!

I have provided deprecation warnings for old APIs that are migrated to the new system. I've also tried wherever possible to always boot discourse, even if code is using old objects or functions. The odds are good that even if you coded directly against an internal Discourse object, your plugin will not stop Discourse from loading (but it will not add or change functionality!)

Using the new API

To use the new client side API, you must ask Discourse for an instance of a PluginAPI object. You can do this in an initializer by importing withPluginApi and calling it like so:

// assets/javascripts/discourse/initializers/with-plugin-sample.js.es6
import { withPluginApi } from 'discourse/lib/plugin-api';

export default {
  name: 'with-plugin-sample',
  initialize() {

     withPluginApi('0.1', api => {
       api.onPageChange(() => console.log('user navigated!'));
     });

  }
}

The idea here is you tell Discourse you want an instance of the Plugin API object for a particular version of the API. Since this is the first release, I've specified the version 0.1.

The cool thing here is that Discourse can provide backwards compatible API objects, even if things behind the scene change. We could be up to version 1.3, for example, but still know how to provide an API compatible object for 0.1.

Additionally, if the API you used is so old that we can't provide a backwards compatibility layer (likely due to a very severe refactor down the line) we just won't call the function and your plugin code will not be executed at all. The idea here is it's better to do nothing at all, rather than have a Javscript error that would interrupt Discourse from starting up safely.

Plugin API Documentation

The documentation for the PluginAPI version 0.1 can be found in plugin-api.js. I've documented the public surface area of the API there. The easiest thing to do when developing a plugin is to open that file and look for the latest hooks and methods you can consume. Also, don't be afraid to ask questions on meta! All the Discourse developers read this forum daily and we can offer guidance and support.

Providing Backwards Compatiblity

New plugin authors will be able to use the withPluginApi as specified above. However, for older plugins that must co-exist with versions of Discourse that exist before the new API was added it's a little more involved.

I have backported the withPluginApi call to the beta and stable branches of Discourse, so that call is safe to make in all currently supported releases. As mentioned previously, if no api is available for the version you requested, that code will not run, so you can use it to gate the code that works with the new API safely.

However, you'll still need a way to run your old code, so I've added a noApi option to help with this. This is how I've ported all the plugins I've done so far. Here's an example of that approach:

// assets/javascripts/discourse/initializers/backwards-example.js.es6
import { withPluginApi } from 'discourse/lib/plugin-api';

function oldCode() {
  // migrate your old plugin code here. It will only be run if no PluginAPI  is present
}

function initializePlugin(api) {
  // do stuff with plugin API!
}

export default {
  name: 'backwards-example',
  initialize() {
     withPluginApi('0.1', api => initializePlugin(api), { noApi: () => oldCode() });
  }
}

In the above example, if version 0.1 of the plugin API is available, initializePlugin will be called and can use it. If no API is present, oldCode will be called. You can paste your old plugin code there and it should work. If you want a more involved example, you can see here how I updated the solved plugin to use this approach.

Again, I'd like to apologize for not having a versioned API in place in the past and the difficulties this will introduce. However, in the long run I believe this change will be worth it, and will drastically prevent developer pain as we continue to update Discourse.

Posts: 8

Participants: 6

Read full topic

App/models/topic_tracking_state - `report` - long response times?

0
0

@DeanMarkTaylor wrote:

I've seen a long response times for this SQL query a few times (> 5).

The most recent occurrence is this one where it took 93.2ms:

Executing action: show
T+173.7 ms
Reader
93.2 ms
lib/freedom_patches/active_record_base.rb:7:in `exec_sql'
lib/sql_builder.rb:67:in `exec'
lib/sql_builder.rb:104:in `map_exec'
app/models/topic_tracking_state.rb:136:in `report'
app/controllers/application_controller.rb:323:in `preload_current_user_data'
app/controllers/application_controller.rb:191:in `preload_json'
lib/middleware/anonymous_cache.rb:129:in `call'
config/initializers/100-quiet_logger.rb:10:in `call_with_quiet_assets'
config/initializers/100-silence_logger.rb:26:in `call'
lib/middleware/request_tracker.rb:73:in `call'
lib/scheduler/defer.rb:85:in `process_client'
lib/middleware/unicorn_oobgc.rb:95:in `process_client'

    SELECT
           u.id AS user_id,
           topics.id AS topic_id,
           topics.created_at,
           highest_post_number,
           last_read_post_number,
           c.id AS category_id,
           tu.notification_level
    FROM topics
    JOIN users u on u.id = 1
    JOIN user_stats AS us ON us.user_id = u.id
    JOIN user_options AS uo ON uo.user_id = u.id
    JOIN categories c ON c.id = topics.category_id
    LEFT JOIN topic_users tu ON tu.topic_id = topics.id AND tu.user_id = u.id
    WHERE u.id = 1 AND
          topics.archetype <> 'private_message' AND
          ((1=0) OR ("topics"."deleted_at" IS NULL AND topics.created_at >= GREATEST(CASE
                  WHEN COALESCE(uo.new_topic_duration_minutes, 2880) = -1 THEN u.created_at
                  WHEN COALESCE(uo.new_topic_duration_minutes, 2880) = -2 THEN COALESCE(u.previous_visit_at,u.created_at)
                  ELSE ('2016-02-23 19:42:40.186120'::timestamp - INTERVAL '1 MINUTE' * COALESCE(uo.new_topic_duration_minutes, 2880))
               END, us.new_since, '2015-11-11 15:24:58.000000') AND tu.last_read_post_number IS NULL AND COALESCE(tu.notification_level, 2) >= 2)) AND
          (topics.visible OR u.admin OR u.moderator) AND
          topics.deleted_at IS NULL AND
          ( NOT c.read_restricted OR u.admin OR category_id IN (
              SELECT c2.id FROM categories c2
              JOIN category_groups cg ON cg.category_id = c2.id
              JOIN group_users gu ON gu.user_id = 1 AND cg.group_id = gu.group_id
              WHERE c2.read_restricted )
          )
          AND NOT EXISTS( SELECT 1 FROM category_users cu
                          WHERE last_read_post_number IS NULL AND
                               cu.user_id = 1 AND
                               cu.category_id = topics.category_id AND
                               cu.notification_level = 0)


UNION ALL

    SELECT
       u.id AS user_id,
       topics.id AS topic_id,
       topics.created_at,
       highest_post_number,
       last_read_post_number,
       c.id AS category_id,
       tu.notification_level
FROM topics
JOIN users u on u.id = 1
JOIN user_stats AS us ON us.user_id = u.id
JOIN user_options AS uo ON uo.user_id = u.id
JOIN categories c ON c.id = topics.category_id
LEFT JOIN topic_users tu ON tu.topic_id = topics.id AND tu.user_id = u.id
WHERE u.id = 1 AND
      topics.archetype <> 'private_message' AND
      (("topics"."deleted_at" IS NULL AND tu.last_read_post_number < topics.highest_post_number AND COALESCE(tu.notification_level, 1) >= 2) OR (1=0)) AND
      (topics.visible OR u.admin OR u.moderator) AND
      topics.deleted_at IS NULL AND
      ( NOT c.read_restricted OR u.admin OR category_id IN (
          SELECT c2.id FROM categories c2
          JOIN category_groups cg ON cg.category_id = c2.id
          JOIN group_users gu ON gu.user_id = 1 AND cg.group_id = gu.group_id
          WHERE c2.read_restricted )
      )
      AND NOT EXISTS( SELECT 1 FROM category_users cu
                      WHERE last_read_post_number IS NULL AND
                           cu.user_id = 1 AND
                           cu.category_id = topics.category_id AND
                           cu.notification_level = 0)

Additionally here is the time before that where it took 31.3ms:

Executing action: show
T+157.0 ms
Reader
31.3 ms
lib/freedom_patches/active_record_base.rb:7:in `exec_sql'
lib/sql_builder.rb:67:in `exec'
lib/sql_builder.rb:104:in `map_exec'
app/models/topic_tracking_state.rb:136:in `report'
app/controllers/application_controller.rb:323:in `preload_current_user_data'
app/controllers/application_controller.rb:191:in `preload_json'
lib/middleware/anonymous_cache.rb:129:in `call'
config/initializers/100-quiet_logger.rb:10:in `call_with_quiet_assets'
config/initializers/100-silence_logger.rb:26:in `call'
lib/middleware/request_tracker.rb:73:in `call'
lib/scheduler/defer.rb:85:in `process_client'
lib/middleware/unicorn_oobgc.rb:95:in `process_client'


    SELECT
           u.id AS user_id,
           topics.id AS topic_id,
           topics.created_at,
           highest_post_number,
           last_read_post_number,
           c.id AS category_id,
           tu.notification_level
    FROM topics
    JOIN users u on u.id = 1
    JOIN user_stats AS us ON us.user_id = u.id
    JOIN user_options AS uo ON uo.user_id = u.id
    JOIN categories c ON c.id = topics.category_id
    LEFT JOIN topic_users tu ON tu.topic_id = topics.id AND tu.user_id = u.id
    WHERE u.id = 1 AND
          topics.archetype <> 'private_message' AND
          ((1=0) OR ("topics"."deleted_at" IS NULL AND topics.created_at >= GREATEST(CASE
                  WHEN COALESCE(uo.new_topic_duration_minutes, 2880) = -1 THEN u.created_at
                  WHEN COALESCE(uo.new_topic_duration_minutes, 2880) = -2 THEN COALESCE(u.previous_visit_at,u.created_at)
                  ELSE ('2016-02-23 20:05:52.900200'::timestamp - INTERVAL '1 MINUTE' * COALESCE(uo.new_topic_duration_minutes, 2880))
               END, us.new_since, '2015-11-11 15:24:58.000000') AND tu.last_read_post_number IS NULL AND COALESCE(tu.notification_level, 2) >= 2)) AND
          (topics.visible OR u.admin OR u.moderator) AND
          topics.deleted_at IS NULL AND
          ( NOT c.read_restricted OR u.admin OR category_id IN (
              SELECT c2.id FROM categories c2
              JOIN category_groups cg ON cg.category_id = c2.id
              JOIN group_users gu ON gu.user_id = 1 AND cg.group_id = gu.group_id
              WHERE c2.read_restricted )
          )
          AND NOT EXISTS( SELECT 1 FROM category_users cu
                          WHERE last_read_post_number IS NULL AND
                               cu.user_id = 1 AND
                               cu.category_id = topics.category_id AND
                               cu.notification_level = 0)


UNION ALL

    SELECT
       u.id AS user_id,
       topics.id AS topic_id,
       topics.created_at,
       highest_post_number,
       last_read_post_number,
       c.id AS category_id,
       tu.notification_level
FROM topics
JOIN users u on u.id = 1
JOIN user_stats AS us ON us.user_id = u.id
JOIN user_options AS uo ON uo.user_id = u.id
JOIN categories c ON c.id = topics.category_id
LEFT JOIN topic_users tu ON tu.topic_id = topics.id AND tu.user_id = u.id
WHERE u.id = 1 AND
      topics.archetype <> 'private_message' AND
      (("topics"."deleted_at" IS NULL AND tu.last_read_post_number < topics.highest_post_number AND COALESCE(tu.notification_level, 1) >= 2) OR (1=0)) AND
      (topics.visible OR u.admin OR u.moderator) AND
      topics.deleted_at IS NULL AND
      ( NOT c.read_restricted OR u.admin OR category_id IN (
          SELECT c2.id FROM categories c2
          JOIN category_groups cg ON cg.category_id = c2.id
          JOIN group_users gu ON gu.user_id = 1 AND cg.group_id = gu.group_id
          WHERE c2.read_restricted )
      )
      AND NOT EXISTS( SELECT 1 FROM category_users cu
                      WHERE last_read_post_number IS NULL AND
                           cu.user_id = 1 AND
                           cu.category_id = topics.category_id AND
                           cu.notification_level = 0)

There isn't anything noteworthy using the CPU / disk and no active sidekiq tasks.

Posts: 6

Participants: 2

Read full topic

Understanding mini-profiler output `Executing action: show`

0
0

@DeanMarkTaylor wrote:

In between SQL statements I'm seeing Executing action: show — XX.XX ms

What exactly does do the Executing action: show times mean?

In a MySQL client you might see two times a "duration" (execution time) "fetch" (how long the data took to transfer over the wire).

The "show" time doesn't seem to match "duration" or "fetch" in MySQL terms.

Sometimes "show" is many times larger than the sum of the previous queries so it would be good to understand what exactly is being done here.

Thanks!

Posts: 4

Participants: 2

Read full topic

HTML Tags not escaped in E-Mails

0
0

@jazzpi wrote:

I came across this when this post was in my Atom Digest. Its title only showed up as "Why", and it appears in the source as

<a href=3D"https://discuss.atom.io/t/why-link-rel-stylesheet-hr=
ef-css-master-css-media-screen-title-no-title-charset-utf-8/25725" style=3D=
"text-decoration: none; font-weight: bold; color: #006699; line-height:1.=
5em;; text-decoration: none; font-weight: bold; color: #006699;; color: #=
0088cc">Why <link rel=3D"stylesheet" href=3D"/css/master.css" media=3D"sc=
reen" title=3D"no title" charset=3D"utf-8"></a>

Posts: 1

Participants: 1

Read full topic

Bulk Actions: "Add Tags" in addition to "Change Tags"

0
0

@tobiaseigen wrote:

Today I made the rather sad discovery that the bulk "change tags" feature depicted below actually will set the tags for selected topics to be exactly the same as the tags entered, meaning it will remove any existing tags. Discovery is sad because I accidentally borked 20 or more topic tags because I misunderstood what was going to happen, and there's no undo. :crying_cat_face:

A fix to this would be to add a new "Add Tags" option to the bulk actions, which would allow the bulk adding of tags to selected topics without removing any existing tags those topics might have. :heart_eyes_cat:

Posts: 2

Participants: 2

Read full topic

How to check for new users (The newest ones?)

0
0

@AnonymousPerson wrote:

Hey! So each week on the Hopscotch Forum, we use to tag the new people in a welcome topic. Each week, that is, until now. I think @Liza_Conrad (one of the customers of your amazing forum setup) stopped doing it, or forgot. I would like to know, is there any shortcut or any way to figure out, who joined recently in a list? I try doing http://forum.gethopscotch.com/badges/0/new_user but it doesn't work.

Tagging all hopscotch people

@Nick_S @MobCraft, @BuildASnowman, @PopTart0219, @Huggingfluffybear, @SilverTinsel

Thanks! :wink:

Posts: 3

Participants: 2

Read full topic


Backup isn't including all uploads folder data

0
0

@markersocial wrote:

So I recently migrated a server from discoursehosting.com to DO.

There is one issue on the new instance, the previous server had the a folder called db1234 (4 digit numerical value) in the var/discourse/shared/standalone/uploads/ folder.

The new server (docker install) uses a folder called 'default' in the var/discourse/shared/standalone/uploads/ folder.

The images and user uploads all load correctly, from both folders now. New uploads going to the default folder and old uploads still working from the db1234 folder.

When I do site backup via the admin panel (including files) however. It only includes the default folder and the db1234 folder is excluded. Not sure if this is fair to call it a bug, I think it would make sense to include all the contents of the uploads folder though.

Posts: 3

Participants: 3

Read full topic

Avatars not displaying from time period prior to SSL implementation

0
0

@markersocial wrote:

The site originally did not use a SSL cert, we added a SSL and updated the SSL setting in discourse. The avatar images of the profiles made prior to the SSL cert do not display on the site and instead show a grey human-shaped default picture (not the coloured default ones that have a capital of the first letter of their username).

Posts: 1

Participants: 1

Read full topic

"Sorry, we couldn't load that topic" / server error 500

0
0

@markersocial wrote:

After attempting an update via the admin area, it failed during the final stages due to not having enough memory (2GB instance). The version shown in the /admin/upgrade area did show the latest version after this error however. After this, I also rebooted the instance via SSH. I've since flexible resized the instance have 4GB ram for the time being.

There is a topic which gives this error when I click on it:

"Sorry, we couldn't load that topic, possibly due to a connection problem. Please try again. If the problem persists, let us know."

If I load the url directly, I get a server error 500. All the other topics I've checked seem fine, it's just this one.

Posts: 4

Participants: 2

Read full topic

Clear Onebox Cache

0
0

@fefrei wrote:

I'm developing a small Onebox plugin and testing it in my production install.

It appears that Discourse is caching the Oneboxes: When I paste a link I once saw oneboxed into a new post, the preview is still looking as if it was generated by an older version of the plugin, while newer links appear as they should. All this is happening in the preview, I'm not actually posting the link.

How can I clear this cache?

Posts: 6

Participants: 3

Read full topic

Mail failed because of exception

0
0

@carlokok wrote:

Error: undefined method `address_list' for #
Return-Path: **@remobjects.com
Message-Id: 56CC7966.1070606@remobjects.com
In-Reply-To: topic/7503/38746@talk.remobjects.com
Date February 23, 2016 4:23pm
From a
To support@remobjects.com
Subject Fwd: Re: [RemObjects Talk] Re Oracle cursors

If needed I can send the full mail/log entry privately.

(Using yesterday mornings HEAD when this was sent)

Posts: 3

Participants: 2

Read full topic

Viewing all 60309 articles
Browse latest View live




Latest Images