Как открыть консоль Rails в Discourse Docker?

discourse
программирование

(Oliver) #1

Мне необходимо войти в контейнер, чтобы добавить таблицы в Discourse. Как войти в консоль?


(Евгений) #2

Таким способом:

cd /var/discourse/
./launcher enter app
rails c

Но я бы не стал без жесткой необходимости менять данные таблиц “в ядре”. ИМХО, наиболее целесообразно использовать пользовательские поля, например: custom_fields.

"user": 
   {
    "id": 0,
      .....
    "custom_fields": { },

Связать с пользователем можно на уровне и админ- интерфейса (стандартная форма добавления пользовательских данных), и через плагин.

Если есть необходимость создать эти поля для других целей, то плагины предоставляют такую возможность.

  enabled_site_setting :test_topics_enabled

  Topic.register_custom_field_type('topic_restricted_test', :boolean)
  add_to_serializer(:topic_view, :custom_fields, false) {object.topic.custom_fields}

  module ::TopicLocked
    def self.access_restricted(guardian, topic, user)
      return true if user.nil?
      return false if guardian.is_admin? || user.id == topic.user_id

      if topic.custom_fields["topic_restricted_test"]
        if user.id != topic.user_id
          return true
        end
     end
   end

Если мы меняем ядро, то у нас в будущем могут быть проблемы. По большому счету, мы можем потерять поддержку, в виду невозможности обновлять дистрибутив.

С другой стороны, если вы хотите отделить ветку, и собираетесь её поддерживать и развивать сами, то можно спокойно добавлять нужные данные, менять саму структуру.


(Виталий) #3

Вот рабочий пример, как добавить, например: topic_help к Topic:

Topic.register_custom_field_type('topic_help', :text)
add_to_serializer(:topic_view, :topic_help) { object.topic.topic_help }

Topic.class_eval do
   def topic_help
      self.custom_fields['topic_help'].to_i
   end
end

Можно посмотреть topic_restricted_help, по:

мой-сайт.ру/t/N.json

Где N - номер темы.