将CKEditor与Rails集成3.2

时间:2012-03-14 01:57:39

标签: ruby-on-rails-3.1 ckeditor ruby-on-rails-3.2

Integrating CKEditor with Rails 3.1 Asset Pipline

类似

我正在尝试将ckeditor与我的rails 3.2应用程序集成。

我在/app/assets/javascripts/ckeditor/*下复制了所有ckeditor文件。

我的application.js中有以下几行,application.js包含在我的布局文件中:

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

Integrating CKEditor with Rails 3.1 Asset Pipline

的答案中摘取

我可以理解我需要添加类似的内容:

config.assets.precompile += your_files

到我的development.rb文件,以便在加载应用程序时预编译所有ckeditor文件。

虽然我尝试了几条路径,但没有工作,我不断收到以下错误:

error on page view and the text area is not shown at all

有人可以告诉我正确的常规表达,包括预编译的所有文件吗?

12 个答案:

答案 0 :(得分:16)

我遇到了同样的问题并找到了解决方案。转到以下链接: http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Specifying_the_Editor_Path

<script type="text/javascript">
var CKEDITOR_BASEPATH = '/assets/ckeditor/';
</script>
<%= javascript_include_tag "application" %>

你不需要设置config.assets.precompile。

答案 1 :(得分:4)

rails 3.2 fix:

    资产/ javascripts / application.js中的
  1. ... blablabla ...
    //= require ckeditor_fix        #- add this line
    //= require ckeditor/init
    //= require_tree .
  2. 在assets / javascripts中创建新文件ckeditor_fix.js
    var CKEDITOR_BASEPATH = '/assets/ckeditor/';

答案 2 :(得分:2)

我使用本指南在启用资产管道的Rails 3.2中将ckeditor添加到activeadmin: https://github.com/gregbell/active_admin/wiki/CKEditor-integration

它就像一个魅力。

我做的唯一额外的事情是将这一行添加到我的环境中:

config.assets.precompile += ['active_admin.css', 'active_admin.js', 'ckeditor/init.js']

答案 3 :(得分:2)

请注意,其中许多答案都引用了ckeditor gem(https://github.com/galetahub/ckeditor/),而不仅仅是ckeditor项目(http://ckeditor.com),特别是在您看到对ckeditor / init.js文件的引用时。

ckeditor集成还有其他宝石,包括ckeditor-rails(https://github.com/tsechingho/ckeditor-rails),它是一种重量更轻,更简单的解决方案。

另见Integrating CKEditor with Rails 3.1 Asset Pipline

答案 4 :(得分:2)

最后一个简单易用的解决方案。

下载CKEditor Zip file,解压缩文件并将它们放在子目录“javascripts / ckeditor”中,将主JS文件添加到布局中。

javascript_include_tag 'ckeditor/ckeditor.js'

..并编写一些JavaScript代码,用CKEditor实例替换textareas:

$(document).ready(function() {
   if ($('textarea').length > 0) {       
     var data = $('textarea');
     $.each(data, function(i) {
       CKEDITOR.replace(data[i].id);
     });     
   }  
});

信用Source

答案 5 :(得分:1)

带有rails 3.2的ckeditor问题是没有为生产环境加载javascript库路径,所以我们需要正确修改路径。 我做了以下步骤:

在application.html.erb

 <%= javascript_include_tag "application" , '/assets/ckeditor/ckeditor.js', '/assets/ckeditor/init.js'%>

在production.rb文件中

 config.assets.precompile += %w(ckeditor/init.js)

运行资产

rake assets:precompile:all

这些步骤适用于我的rails版本3.2.8

答案 6 :(得分:1)

这只是一个补充。我尝试了所有这些并且它对我不起作用所以我做的是将我的ckeditor gem更改为gem 'ckeditor'

并将此添加到我的application.js

//= require ckeditor/init

然后为了预编译我的资产,我将其添加到我的production.rb文件

config.assets.precompile += Ckeditor.assets

这一切都像魔术一样工作

答案 7 :(得分:1)

第1步:在您的gemfile中添加gem 'paperclip'gem "ckeditor"

第2步:捆绑安装。

第3步: rails generate ckeditor:install --orm=active_record --backend=paperclip

第4步:放置config.autoload_paths += %W(#{config.root}/app/models/ckeditor) in application.rb

第5步mount Ckeditor::Engine => "/ckeditor"如果不存在则放置db:migrate

第6步:打开application.html.erb并将此<%= javascript_include_tag 'ckeditor/ckeditor.js' %>放入标题中。

第7步:将其放在application.html.erb

中的页脚(身体标记上方)中
<script type="text/javascript">
  $(document).ready(function() {
    if ($('textarea').length > 0) {
        var data = $('textarea');
        $.each(data, function(i) {
            CKEDITOR.replace(data[i].id);
        });
    }
 });
</script>

第8步:重新启动WEBrick SERVER。 就是这样。

答案 8 :(得分:0)

最近有很多关于这个主题的帖子,但是没有一个(包括如上所述定义BASEPATH)对我有用,所以我认为这可能对某些人有帮助。

我通过使用路径

复制目录中的文件来解决问题

〜/ .rvm / gems / ruby​​-1.9.3x / gems / ckeditor-3.7.0.rc3 ('x'是特定应用的,你的不同)

到目录/ assets / javascript。

然后我能够编辑config.js文件中工具栏的配置,使编辑器具有我想要的选项。这对我来说非常合适,因为我总是想在这个应用程序中使用相同的选项。

更新

我现在让它使用属于它的资产管道中的config.js文件,但是重置了驻留在我的.rvm gemset中的ckeditor代码。我认为存在冲突,因为我试图重新定义他们的工具栏,名为“Easy”。当我制作一个新的工具栏&amp;设置一个是活动的,管道似乎工作正常。

答案 9 :(得分:0)

我尝试将多个样式表和javascripts组合成一个没有资产管道的Rails 3.1应用程序中的一个,使用stylesheet_link_tag和javascript_include_tag与缓存选项。在这种情况下,文件并不总是以正确的顺序加载,并且其他ckeditor文件的路径(如配置文件“config.js”)和语言文件(如“lang / en.js”)的定义不明确。这意味着在检索它们时会出现其他额外的“NetworkError:404 Not Found”错误,并且配置和语言文件不可用,这会导致更多致命错误,例如上面提到的Uncaught TypeError: Cannot read property 'options' of undefined

使用Javascript超时没有帮助,并且设置CKEDITOR_BASEPATH也没有帮助,至少如果你在编辑器加载之前在application.js中定义它(可能顺序很重要)这里?)。为了使其工作,可以从公共缓存文件中提取ckeditor javascript(或将其从资产管道中取出)并在其余文件之后单独加载

<%= javascript_include_tag 'ckeditor/ckeditor.js' %>

答案 10 :(得分:0)

我在这个问题上打了几个小时,但问题不在于CKEditor,而在于我的代码。我在我的局部视图中包含ckeditor.js脚本,该脚本是通过 AJAX 呈现的,是的,你猜对了,不行。一旦我移动了包含在主布局(_Layout)内的脚本,问题就解决了。当然,在 ASP.NET MVC 中工作时,这发生在我身上。对于其他Web框架,我没有解决方案。

答案 11 :(得分:0)

有类似的问题。对我来说,它是通过覆盖默认的预编译任务来修复的(我使用了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. 中的文字