将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上),通过:
- 在vendor / assets / javascripts / ckeditor中包含ckeditor代码
- 将
config.assets.precompile += ['ckeditor/*']
到我的production.rb - 在application.html.erb中设置ckeditor基本路径
var CKEDITOR_BASEPATH = '/assets/ckeditor/';
在包含application.js之前 - 在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)。
- 添加到application.rb
config.assets.precompile += ['ckeditor/*']
- 在application.js
//= require ckeditor/init
- 创建文件
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