ruby-on-rails - CKEditor 不仅仅在生产环境中工作

标签 ruby-on-rails ckeditor sprockets uglifier

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

在该页面上,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压缩器
  • 手动设置CKEDITOR_BASEPATH

public/assets/ckeditor 中由 rake asset:precompile 生成的资源文件末尾都有一个哈希值,如下所示:

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

但是 JS 似乎没有加载它们并尝试立即修复它。

<小时/>

代码

我的 JavaScript 文件:

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

Assets 初始化器:

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

最佳答案

浏览图书馆Issues and Pull Requests在 Github 上,事实证明这不是我的代码的问题,而是 Ruby Gem 本身的 4.x.x 版本中的错误(导致与 Rails 5 不兼容)。

已经有人 opened an issue和一个PR fixing this was also merged两个月前就掌握了,但之后就没有包含该补丁的版本了。所以我的临时解决方案是直接从master加载gem:

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

关于ruby-on-rails - CKEditor 不仅仅在生产环境中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42173585/

相关文章:

php - CKEDITOR - Uncaught Error : The specified element mode is not supported on element: "meta"

javascript - 回形针默认 url 图像在 Rails 5 中不起作用

javascript - 将时间戳添加到已编译的 JavaScript 中

php - CKEDITOR - 在 Laravel 5 中使用 AJAX 更新/创建产品失败

javascript - 使用 CKEditor 在 setData 和模式更改时重置监听器事件

ruby-on-rails - sprockets/rails : Find all files Sprockets knows how to compile

ruby-on-rails - 使用字典重构 Ruby on Rails i18n YAML 文件

ruby-on-rails - 将group_by与fields_for和accepts_nested_attributes_for一起使用

ruby-on-rails - 将虚拟属性添加到 json 输出

ruby-on-rails - 使用 CarrierWave 上传 RESTful 文件