CKEditor不仅仅适用于生产环境

时间:2017-02-11 07:47:32

标签: ruby-on-rails ckeditor sprockets uglifier

我在我的Rails应用程序中使用ckeditor ruby​​ gem(v4.2.2),它在开发中工作正常,但在我的production环境中却没有。它看起来不像我的资产管道有问题,因为所有其他资产加载没有任何问题。

在页面上,Google Chrome向我显示以下错误:

Uncaught TypeError: Cannot set property 'dir' of undefined

enter image description here

虽然Firefox只是在控制台中抛出此内容:

TypeError: c[a] is undefined[Learn More]

到目前为止我尝试了什么:

  • 使用Uglifier.new(mangle: false)作为Sprockets中的JS Compressor
  • 手动设置CKEDITOR_BASEPATH

rake asset:precompilepublic/assets/ckeditor生成的资产文件最后都有一个哈希,如下所示:

ckeditor-e0b9bfe15298d2b2dd388960b27d35e6a18c89b2390f8986d398c30da5496e4b.js
config-1fb318e1cc0eea7b8c181941c3c1f09d2b96107b2f7ff4891755fbb2201ba53d.js
contents-4540cf2cb7116b32bac2995494c4fc0c55804444f37c02cfa11256bd695e4194.css
# etc

但JS似乎没有加载它们并试图解决这个问题。

代码

我的Javascript文件:

//= require pages-javascript
//= require ckeditor/init
//= require_tree ./ckeditor
//= require_self

资产初始化程序:

# config/initializers/assets.rb
Rails.application.config.assets.version = '1.0'

Rails.application.config.assets.precompile << Proc.new do |filename, full_path|
  if filename =~ /\.(css|js|svg|eot|woff|ttf)\z/
    app_assets_path = Rails.root.join('app', 'assets').to_s
    if full_path.starts_with? app_assets_path
      Rails.logger.info "including asset: " + full_path
      true
    else
      Rails.logger.info "excluding asset: " + full_path
      false
    end
  else
    false
  end
end

Rails.application.config.assets.precompile += %w( ckeditor/* )

2 个答案:

答案 0 :(得分:2)

在Github上浏览库Issues and Pull Requests,结果证明我的代码不是问题,而是Ruby Gem本身的4.x.x版本中的错误(导致与{{不兼容) 1}})。

2个月前已有人opened an issuePR fixing this was also merged掌握,但在包含补丁后没有发布。所以我的临时解决方案是直接从master加载gem:

Rails 5

答案 1 :(得分:1)

您是否尝试过单独加载ckeditor?尝试在没有捆绑的情况下加载它以查看库是否正确加载。从控制台输出我看到一些文件没有加载,可能捆绑/缩小不适用于那些文件。在<head>中加载ckeditor文件以查看是否一切正常。