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

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

Я бы предпочел сделать это, не используя драгоценный камень, так как кажется, что все, что мне нужно сделать, это удалить исходные файлы в каталог 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, а затем нажатием на герою. Here's a screenshot of the client-side errors that occur

Ответы

Ответ 1

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

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

config.assets.precompile += your_files

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

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

Ответ 2

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

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

Ответ 3

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

Двигатель CKEditor

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

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

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

CKEditor Rails

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

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

Upshot

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

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

Ответ 4

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

  • Добавить в application.rb config.assets.precompile += ['ckeditor/*']
  • В application.js //= require ckeditor/init
  • Создайте файл lib/tasks/precompile_hook и вставьте текст из этого ответа Прекомпилировать крючок

Ответ 5

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

конфигурации/среда/production.rb

 config.assets.compile = true

Ответ 6

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

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

Ответ 7

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

Драгоценный камень работал просто отлично из коробки в разработке, но при развертывании в производство с использованием предварительно скомпилированных активов под 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:

Вы можете создать приложение/активы/javascripts/ckeditor/basepath.js.erb для иметь свой собственный CKEDITOR_BASEPATH.

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

Ответ 8

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

config.assets.precompile + = ['ckeditor/*']

а также установите

config.assets.debug = true