Системы управления контентом Ruby on Rails? [закрытый]

Важные изменения поведения между старыми и новыми классами стиля

  • super добавлено
  • MRO изменено (объяснено ниже)
  • дескрипторы добавлены
  • объекты класса нового стиля не могут быть подняты, если не получены из Exception (пример ниже)
  • __slots__ Добавлено

MRO (порядок разрешения метода) изменено

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

Вопрос заключается в порядке поиска атрибутов (включая методы и переменные-члены) при множественном наследовании.

Классические классы сначала делают глубину поиск слева направо. Остановка в первом матче. У них нет атрибута __mro__.

class C: i = 0
class C1(C): pass
class C2(C): i = 2
class C12(C1, C2): pass
class C21(C2, C1): pass

assert C12().i == 0
assert C21().i == 2

try:
    C12.__mro__
except AttributeError:
    pass
else:
    assert False

Классы нового стиля MRO сложнее синтезировать в одном английском предложении. Здесь подробно объясняется . Одним из его свойств является то, что базовый класс просматривается только после того, как все его производные классы были. У них есть атрибут __mro__, который показывает порядок поиска.

class C(object): i = 0
class C1(C): pass
class C2(C): i = 2
class C12(C1, C2): pass
class C21(C2, C1): pass

assert C12().i == 2
assert C21().i == 2

assert C12.__mro__ == (C12, C1, C2, C, object)
assert C21.__mro__ == (C21, C2, C1, C, object)

Объекты класса нового стиля не могут быть подняты, если они не получены из Exception

Вокруг Python 2.5 можно было бы увеличить множество классов, в то время как Python 2.6 был удален. На Python 2.7.3:

# OK, old:
class Old: pass
try:
    raise Old()
except Old:
    pass
else:
    assert False

# TypeError, new not derived from `Exception`.
class New(object): pass
try:
    raise New()
except TypeError:
    pass
else:
    assert False

# OK, derived from `Exception`.
class New(Exception): pass
try:
    raise New()
except New:
    pass
else:
    assert False

# `'str'` is a new style object, so you can't raise it:
try:
    raise 'str'
except TypeError:
    pass
else:
    assert False

22
задан Alan 4 October 2008 в 19:58
поделиться

9 ответов

Вы могли попробовать RadiantCMS.

8
ответ дан Codebeef 29 November 2019 в 05:26
поделиться

Я должен не согласиться с предложением RadiantCMS. В то время как это - хороший CMS для некоторых приложений (и мы используем его на работе), я не думаю, что это отвечает определенным требованиям (на основе моего опыта с помощью него, который по общему признанию не является всем этим обширным):

  • нет никакой системы классификации;
  • рабочий процесс публикации слишком упрощен - т.е. страница является проектом или опубликованный, и нет никакого рабочего процесса одобрения;
  • содержание является простым HTML или одним из нескольких языков разметки, не XML;
  • можно абстрагировать содержание далеко от опубликованных страниц с отрывками, но это быстро становится неуправляемым.

может быть подходящий CMS Ruby on Rails для Ваших требований, но я не думаю, что RadiantCMS - он.

6
ответ дан TimB 29 November 2019 в 05:26
поделиться

Другой выбор Mephisto и другие, перечисленные в InfoQ. Я сделал прекрасный путем создания сверху плагин Goldberg, но поэтому я ожидал писать пользовательский код относительно классификации содержания.

, Как Вы знаете, любой CMS будет иметь конкуренцию и переменные требования. Это обычно объясняет, почему у всех и их дяди есть их собственный CMS.

3
ответ дан Alan 29 November 2019 в 05:26
поделиться

Я должен согласиться с TimB. Я реализовал RadiantCMS, когда моя компания сначала начинала, и это работало отлично. Однако это фокусируется на том, чтобы быть простым установить и использовать и не является полнофункциональным CMS с рабочим процессом и таким.

Мы на самом деле переехали от Источника излучения несколько месяцев назад и являемся теперь очень счастливым использованием SilverStripe. SS сделал бы больше всего, если не все из того, что Вы запросили, к сожалению, он основан на PHP и не Ruby, таким образом, я не уверен, сколько справки, которая является.

Позже...
Richard

1
ответ дан Richard Hurt 29 November 2019 в 05:26
поделиться

Я попробовал RadiantCMS и работавший с Drupal, я думаю, что RadiantCMS нигде не близок быть полной Системой управления контентом. Я также искал CMS как Drupal в RoR. Смотрите на это: http://joshhuckabee.com/drupal-and-ruby-rails

1
ответ дан 29 November 2019 в 05:26
поделиться

Также существует плагин Station. Я еще не использовал его, но он был размещен на RubyInside.

0
ответ дан 29 November 2019 в 05:26
поделиться

Коматозный довольно хорош, и он довольно ненавязчиво интегрируется в существующие сайты. Самое лучшее в Comatose - это то, что вы можете определять свои собственные текстовые фильтры. Например, чтобы использовать HAML на своих страницах, просто вставьте это в инициализатор:

# HAML Text Filter
TextFilters.define :haml, "HAML" do
  require 'haml'
  def render_text(text)
    engine = Haml::Engine.new(text)
    engine.render 
  end
end
2
ответ дан 29 November 2019 в 05:26
поделиться

Мы разрабатываем систему управления элементами и контентом с открытым исходным кодом, которая имеет довольно хорошую таксономию (неограниченное количество потомков категорий / глубина). Он предназначен для перечисления различных элементов (это могут быть страницы, сообщения в блогах, поставщики и т. Д.). Не уверен, что это подойдет вам, но вы можете попробовать демо по адресу:

http://hulihanapplications.com/projects/opal

Надеюсь, это поможет.

2
ответ дан 29 November 2019 в 05:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: