Интеграция 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