【问题标题】:CKEditor doesn't work only in production envCKEditor 不仅在生产环境中工作
【发布时间】:2017-02-11 07:47:32
【问题描述】:

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

在页面上,谷歌浏览器给了我这个错误:

Uncaught TypeError: Cannot set property 'dir' of undefined

而 Firefox 只是在控制台中抛出这个:

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

到目前为止我所做的尝试:

  • 在 Sprockets 中使用 Uglifier.new(mangle: false) 作为 JS 压缩器
  • 手动设置CKEDITOR_BASEPATH

rake asset:precompilepublic/assets/ckeditor中生成的asset文件都有一个hash,如下:

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/* )

【问题讨论】:

  • 我看到你专门为 ckeditor 准备了一个清单文件,对吧?

标签: ruby-on-rails ckeditor sprockets uglifier


【解决方案1】:

浏览 Github 上的库 Issues and Pull Requests,结果发现这不是我的代码的问题,而是 Ruby Gem 本身的 4.x.x 版本中的错误(导致与 Rails 5 不兼容)。

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

gem 'ckeditor', github: 'galetahub/ckeditor', ref: '11d3a5b'

【讨论】:

  • 并浪费了 10 多个小时试图“修复”这个问题。
  • 我在 4.2.2 上遇到了这个问题。更新到 4.2.4 解决了问题。
【解决方案2】:

您是否尝试过单独加载 ckeditor?尝试在没有捆绑的情况下加载它,以查看库是否正确加载。从控制台输出中,我看到一些文件没有加载,可能捆绑/缩小不起作用,因为它应该适用于这些文件。加载 &lt;head&gt; 中的 ckeditor 文件,看看这样是否一切正常。

【讨论】:

  • 是的,如问题所述,它工作正常。这是资产在生产中的压缩方式以及前端客户端无法加载它们的问题。
  • 所以只需将 ckeditor 从捆绑中分离出来。我几乎每次都将外部库与我的捆绑分开,因为它们给我带来了错误和头痛。你永远不知道这些库是如何实现的。
猜你喜欢
  • 1970-01-01
  • 2017-04-14
  • 2017-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-16
  • 2018-03-23
相关资源
最近更新 更多