将CKEditor与Rails 3.1 Asset Pipline集成

我是资产管道的新手,刚刚从Rails 3.0迁移过来。 我正在努力让CKEditor进入管道,但是它的所有gem都不清楚它们是如何工作的,并且很少或没有使用说明。

我更愿意在不使用gem的情况下执行此操作,因为似乎我所要做的就是将源文件放入vendor/assets目录中,然后将它们包含在application.js 。 我已经尝试过,但是,当我预编译并推送到生产时,似乎找不到某些文件(例如, editor.css ),并且编辑器根本没有显示(只是空白区域)。

的application.js

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

这与vendor/assets/javascript/ckeditor/的源文件vendor/assets/javascript/ckeditor/ ,并指向ckeditor.js 。 我只是不确定从哪里开始。 此代码在开发中工作正常,但在生产中不起作用。 我正在运行rake assets:precompile在添加和提交git之前rake assets:precompile ,然后推送到heroku。 这是发生的客户端错误的屏幕截图

如果您使用的是Rails 3.1.0,则应升级到3.1.1。 在此版本中,预编译rake任务将资产编译为原始文件名和消化文件名。 这是第三方代码,管道感知不会仍然有效。

您需要将ckeditor目录及其所有子目录添加到预编译数组中,以便预编译任务知道编译它们。

config.assets.precompile += your_files

your_files可以是文件,正则表达式或Procs的数组 – 无论是什么都需要捕获ckeditor文件的名称。 我没有使用ckeditor来解决预编译需要进行的操作,所以如果你发布你想出的内容,其他人可能会很感激!

需要注意的一件事是,如果您为Web服务器上的/ assets目录设置了远期标头,则需要排除CKeditor目录。 由于这些文件不会被指纹识别,因此当您更新CKeditor并且某些客户端未获取更新的代码时可能会出现问题,因为它们具有标记为仅在将来的某个时间到期的缓存副本。

我得到了这个工作(部署在Heroku上),通过:

  1. 在vendor / assets / javascripts / ckeditor中包含ckeditor代码
  2. config.assets.precompile += ['ckeditor/*']到我的production.rb
  3. 在application.html.erb中设置ckeditor基本路径var CKEDITOR_BASEPATH = '/assets/ckeditor/'; 在包含application.js之前
  4. 在application.js中,include //= require ckeditor/ckeditor

咬紧牙关,使用gem。 这里有两个选择:

CKEditor引擎

https://github.com/galetahub/ckeditor

它作为引擎运行,并在资产中包含自己的可安装CKEditor。 它还公开了可以添加到资产路径的Ckeditor.assets。 这引用了CKEditor所需的所有图像,插件,语言文件和各种垃圾。

它有一个处理图像上传的镜头,它还与ActiveAdmin很好地集成。

CKEditor Rails

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

这样做的更少,您将其包含在资产管道中,并为您完成剩下的工作。 适用于所有基本用例,简单而且充足。

结果

我在实际项目中使用了这两个,并且都做了这个工作。 如果您计划使用ActiveAdmin并且想要平稳骑行,请使用前者。 如果您喜欢最小化,请使用后者。

CKEditor非常难看。 保持它的长度,然后当你需要升级时,你可以换掉另一个。

有类似的问题。 对我来说,它通过覆盖默认的预编译任务来修复(我使用了Rails 4和CkEditor 4)。

  1. 添加到application.rb config.assets.precompile += ['ckeditor/*']
  2. 在application.js //= require ckeditor/init
  3. 创建文件lib/tasks/precompile_hook并粘贴此答案预编译钩子中的文本

有同样的问题,我已经调整了生产中的后备资产,这些资产在修复之前还没有消化:

配置/环境/ production.rb

  config.assets.compile = true 

那么/ public中的ckeditor_assets目录呢? 上传的照片和附件会转到这些目录,默认情况下在app / models / ckeditor / [attachment.rb,photo.rb]中定义

ckeditor_assets不在资产范围内,图像/文件不可访问(url如http://sofzh.miximages.com/ruby-on-rails/file.jpg不起作用,但文件在那里)

我花了一些时间让ckeditor_railsgem工作; 也许我可以为其他人试图做同样的事情节省一些时间。

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设置添加到文件中,重新编译了我的资产,一切都很好。

在你的config / development.rb中一定要设置

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

以及设定

config.assets.debug = true