#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), путем:
- Включение кода 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
Комментарии:
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).
- Добавить в application.rb
config.assets.precompile = ['ckeditor/*']
- В application.js
//= require ckeditor/init
- Создайте файл
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