将CKEditor与Rails 3.1 Asset Pipeline集成

时间:2011-10-27 10:59:52

标签: ruby-on-rails ruby-on-rails-3.1 ckeditor asset-pipeline

我是资产管道的新手,刚刚从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。我只是不确定从哪里开始。此代码在开发中工作正常,但在生产中不起作用。我在添加并提交git之前运行rake assets:precompile,然后推送到heroku。 Here's a screenshot of the client-side errors that occur

8 个答案:

答案 0 :(得分:28)

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

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

答案 1 :(得分:10)

咬紧牙关并使用宝石。这里有两个选择:

CKEditor引擎<​​/ h2>

https://github.com/galetahub/ckeditor

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

它可以处理图像上传,并且还可以与 ActiveAdmin 很好地集成。

CKEditor Rails

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

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

结果

我在实际项目中使用了这两个并且都做了这个工作。如果您打算使用ActiveAdmin并且想要平稳骑行,请使用前者。如果您愿意,请使用后者。

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

答案 2 :(得分:7)

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

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

config.assets.precompile += your_files

your_files可以是文件,正则表达式或过程的数组 - 无论是什么都需要捕获ckeditor文件的名称。我没有方便的解决预编译需要的东西,所以如果你发布你想出的东西,其他人可能会很感激!

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

答案 3 :(得分:1)

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

  1. 添加到application.rb config.assets.precompile += ['ckeditor/*']
  2. 在application.js //= require ckeditor/init
  3. 创建文件lib/tasks/precompile_hook并粘贴此回复Precompile hook
  4. 中的文字

答案 4 :(得分:1)

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

配置/环境/ production.rb

 config.assets.compile = true

答案 5 :(得分:0)

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

ckeditor_assets不在资源范围内,图片/文件无法访问(类似http://yourdomain.com/ckeditor_assets/pictures/1/file.jpg的网址不起作用,但文件在那里)

答案 6 :(得分:0)

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

答案 7 :(得分:0)

在config / development.rb中,请务必设置

  

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

以及设置

  

config.assets.debug = true