Интеграция CKEditor с Rails 3.1 Asset Pipline

#ruby-on-rails #ruby-on-rails-3.1 #ckeditor #asset-pipeline

#ruby-on-rails #ruby-on-rails-3.1 #ckeditor #конвейер активов

Вопрос:

Я новичок в конвейере активов, только что перешел с Rails 3.0. Я пытаюсь подключить CKEditor к конвейеру, но все его драгоценные камни действительно неясны в отношении того, как они работают, и имеют мало или вообще не имеют инструкций по использованию.

Я бы предпочел сделать это без использования gem, поскольку кажется, что все, что мне нужно сделать, это поместить исходные файлы в vendor/assets каталог, а затем включить их application.js . Я пробовал это, однако, когда я предварительно компилирую и запускаю в производство, кажется, что некоторые файлы не найдены ( editor.css например), и редактор вообще не отображается (просто пустая область).

application.js

 //= require jquery
//= require jquery_ujs
//= require ckeditor/ckeditor
//= require_self
 

Это связано с исходными файлами vendor/assets/javascript/ckeditor/ и указывает на ckeditor.js . Я просто не уверен, куда идти дальше. Этот код отлично работает в разработке, но не работает в производстве. Я запускаю rake assets:precompile перед добавлением и фиксацией в git, а затем нажимаю на heroku. Вот скриншот возникающих ошибок на стороне клиента

Комментарии:

1. Поскольку несколько человек смотрят этот вопрос — с Rails 3.1 CKEditor довольно легко интегрируется с конвейером ресурсов — вам просто нужно указать своему приложению включить его (в файлах манифеста или application.rb). Есть хороший камень, который организует все для вас: ckeditor_rails.

Ответ №1:

Я получил эту работу (развернутую на Heroku), путем:

  1. Включение кода ckeditor в vendor /assets / javascripts / ckeditor
  2. Добавление config.assets.precompile = ['ckeditor/*'] в мой production.rb
  3. Настройте базовый путь вашего ckeditor в application.html.erb var CKEDITOR_BASEPATH = '/assets/ckeditor/'; перед включением application.js
  4. В application.js , включают в себя //= require ckeditor/ckeditor

Комментарии:

1. Не так плохо, как я боялся 🙂

2. Отличный ответ! Большое вам спасибо.

3. A Молодец. Вы спасли мой день. Это должен быть принятый ответ

Ответ №2:

Стисни зубы и используй драгоценный камень. Здесь два варианта:

Движок CKEditor

https://github.com/galetahub/ckeditor .

Это работает как движок и включает в себя собственный монтируемый CKEditor в assets. Он также предоставляет Ckeditor.assets, который вы можете добавить в свой путь к ресурсам. В нем содержатся ссылки на все изображения, плагины, языковые файлы и разный мусор, который требуется CKEditor.

Он позволяет обрабатывать загружаемые изображения, а также хорошо интегрируется с ActiveAdmin.

CKEditor Rails

https://github.com/tsechingho/ckeditor-rails

Это делает меньше, вы включаете его в свой конвейер активов, и он делает все остальное за вас. Приятный, простой и достаточный для всех базовых вариантов использования.

Итог

Я использовал оба из них в реальных проектах, и оба выполняют свою работу. Используйте первый, если вы планируете использовать ActiveAdmin и хотите плавной работы. Используйте последний, если вы предпочитаете минимальный.

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

Комментарии:

1. Согласен — я опубликовал это почти год назад, и теперь ckeditor gem — это определенно правильный путь, хотя я предпочитаю этот, потому что он не пытается сделать слишком много.

2. Согласен, это мне тоже нравится. Выглядит намного более легким.

3. Я изменил ответ, включив в него драгоценный камень CKEditor Rails.

4. Я использовал драгоценный камень CKEditor Rails в реальном проекте, и он отлично справляется со своей задачей.

5. Спасибо! Я обнаружил, что второй вариант работает намного лучше для меня 🙂

Ответ №3:

Если вы используете Rails 3.1.0, вам следует перейти на 3.1.1. В этой версии задача предварительной компиляции rake компилирует ресурсы как в исходные, так и в переработанные имена файлов. Это значит, что сторонний код, который не поддерживает конвейер, все равно будет работать.

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


config.assets.precompile = your_files

your_files может быть массивом файлов, регулярных выражений или процедур — все, что необходимо для записи имен файлов ckeditor. У меня нет ckeditor под рукой, чтобы определить, что нужно для предварительной компиляции, поэтому другие могут оценить это, если вы опубликуете то, что придумали!

Следует обратить внимание на то, что если у вас установлены заголовки far-future для каталога /assets на вашем веб-сервере, вам нужно будет исключить каталог CKEditor. Поскольку эти файлы не будут отпечатаны, при обновлении CKEditor могут возникнуть проблемы, когда некоторые клиенты не получат обновленный код, поскольку у них есть кэшированная копия, срок действия которой истекает только через некоторое время в будущем.

Ответ №4:

Аналогичная проблема. Для меня это было исправлено путем переопределения задачи предварительной компиляции по умолчанию (я использовал Rails 4 и CKEditor 4).

  1. Добавить в application.rb config.assets.precompile = ['ckeditor/*']
  2. В application.js //= require ckeditor/init
  3. Создайте файл lib/tasks/precompile_hook и вставьте текст из этого ответа для предварительной компиляции

Ответ №5:

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

config/environments/production.rb

  config.assets.compile = true
 

Ответ №6:

как насчет каталога ckeditor_assets в /public ? загруженные фотографии и вложения отправляются в те каталоги, которые определены по умолчанию в app/models/ckeditor/[attachment.rb,photo.rb]

ckeditor_assets находится за пределами ресурсов, а изображения / файлы недоступны (url, например http://yourdomain.com/ckeditor_assets/pictures/1/file.jpg не будет работать, но файл есть)

Ответ №7:

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

Gem отлично работал «из коробки» при разработке, но при развертывании в производство с использованием предварительно скомпилированных ресурсов в Phusion Passenger этого не произошло. Мне было ясно, что проблема заключалась в том, что он искал активы под:

 http://myhost.com/assets/ckeditor
 

где на самом деле это нужно было искать:

 http://myhost.com/my_app_name/assets/ckeditor
 

Мне также было ясно, что мне нужно как-то установить:

 var CKEDITOR_BASEPATH = '/my_app_name/assets/ckeditor'
 

но независимо от того, где и как я пытался это сделать, это не помогло.

Наконец, я нашел это ключевое предложение в gem wiki:

Вы можете создать app/assets/javascripts/ckeditor/basepath.js.erb, чтобы иметь свой собственный CKEDITOR_BASEPATH.

Я создал файл, как указано (вместе с моим config.js файл для настройки редактора), добавил в файл мой параметр CKEDITOR_BASEPATH, повторно скомпилировал мои ресурсы, и все было хорошо.

Ответ №8:

В вашем config / development.rb обязательно установите

config.assets.precompile = [‘ckeditor/*’]

а также набор

config.assets.debug = true