【问题标题】:Integrating CKEditor with Rails 3.1 Asset Pipline将 CKEditor 与 Rails 3.1 资产管道集成
【发布时间】:2011-10-27 10:59:52
【问题描述】:

我是 Asset Pipeline 的新手,刚刚从 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/ 中的源文件,并且指向ckeditor.js。我只是不确定从这里去哪里。此代码在开发中工作正常,但在生产中不起作用。在添加并提交到 git 之前,我正在运行 rake assets:precompile,然后推送到 heroku。

【问题讨论】:

  • 因为有几个人在看这个问题——使用 Rails 3.1+,CKEditor 很容易与 Asset Pipeline 集成——你只需要告诉你的应用程序包含它(在清单文件或 application.rb )。有一个很好的 gem 可以为你组织一切:ckeditor_rails。

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


【解决方案1】:

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

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

【讨论】:

  • 没有我担心的那么糟糕 :)
  • 很好的答案!非常感谢。
  • A++ 干得好。你拯救了我的一天。那应该是公认的答案
【解决方案2】:

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

CKEditor 引擎

https://github.com/galetahub/ckeditor

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

它在处理图像上传方面很有优势,并且还与 ActiveAdmin 很好地集成。

CKEditor Rails

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

这做的更少,您将其包含在您的资产管道中,其余的工作都会为您完成。对于所有基本用例来说都很好,简单且足够。

结果

我在现场项目中使用了这两种方法,并且都可以完成工作。如果您打算使用 ActiveAdmin 并且想要平稳运行,请使用前者。如果您喜欢最小化,请使用后者。

CKEditor 很丑。保持一定的距离,然后当您需要升级时,可以将其换成另一个。

【讨论】:

  • 同意 - 我大约一年前发布了这个,现在 ckeditor gem 绝对是要走的路,虽然我更喜欢this one,因为它不会尝试做太多事情。
  • 同意,我也喜欢那个。看起来重量轻了很多。
  • 我已修改答案以包含 CKEditor Rails gem。
  • 我在一个实时项目中使用了 CKEditor Rails gem,它做得很好。
  • 谢谢!我发现第二个选项对我来说效果更好:-)
【解决方案3】:

如果您使用的是 Rails 3.1.0,则应该升级到 3.1.1。在此版本中,预编译 rake 任务将资产编译为原始文件名和摘要文件名。这样一来,不支持管道的第三方代码仍然可以工作。

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

config.assets.precompile += your_files

your_files 可以是文件数组、正则表达式或 Procs - 任何需要捕获 ckeditor 文件的名称。我没有方便的 ckeditor 来计算预编译需要做什么,所以如果你发布你想出的东西,其他人可能会感激它!

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

      遇到同样的问题,我已经调整了生产中的后备资源,以便在修复之前没有消化:

      config/environments/production.rb

       config.assets.compile = true
      

      【讨论】:

        【解决方案6】:

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

        ckeditor_assets 不在资产范围内,无法访问图像/文件(http://yourdomain.com/ckeditor_assets/pictures/1/file.jpg 之类的 URL 不起作用,但文件在那里)

        【讨论】:

          【解决方案7】:

          我花了一些时间让ckeditor_rails gem 工作;也许我可以为其他尝试这样做的人节省一些时间。

          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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-11-23
              • 1970-01-01
              • 2012-02-04
              • 2011-10-04
              • 1970-01-01
              相关资源
              最近更新 更多