CKEditor 不仅适用于生产环境
CKEditor doesn't work only in production env
我在我的 Rails 应用程序中使用 ckeditor
ruby gem (v4.2.2),它在开发中运行良好,但在我的 production
环境。它看起来不像是我的资产管道的问题,因为所有其他资产加载都没有任何问题。
在页面上,Google Chrome 给我这个错误:
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:precompile
在public/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/* )
你试过单独加载ckeditor吗?尝试在没有捆绑的情况下加载它,以查看库是否正确加载。从控制台输出中我看到一些文件没有加载,可能 bundling/minification 对这些文件不起作用。在 <head>
中加载 ckeditor 文件,看看这样是否一切正常。
在 Github 上查看库 Issues and Pull Requests,发现这不是我的代码的问题,而是 Ruby 的 4.x.x
版本中的错误Gem 本身(导致与 Rails 5
不兼容)。
有人在 2 个月前就已经 opened an issue and a PR fixing this was also merged 掌握了,但是在它包含补丁之后没有发布。所以我的临时解决方案是直接从 master:
加载 gem
gem 'ckeditor', github: 'galetahub/ckeditor', ref: '11d3a5b'
我在我的 Rails 应用程序中使用 ckeditor
ruby gem (v4.2.2),它在开发中运行良好,但在我的 production
环境。它看起来不像是我的资产管道的问题,因为所有其他资产加载都没有任何问题。
在页面上,Google Chrome 给我这个错误:
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:precompile
在public/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/* )
你试过单独加载ckeditor吗?尝试在没有捆绑的情况下加载它,以查看库是否正确加载。从控制台输出中我看到一些文件没有加载,可能 bundling/minification 对这些文件不起作用。在 <head>
中加载 ckeditor 文件,看看这样是否一切正常。
在 Github 上查看库 Issues and Pull Requests,发现这不是我的代码的问题,而是 Ruby 的 4.x.x
版本中的错误Gem 本身(导致与 Rails 5
不兼容)。
有人在 2 个月前就已经 opened an issue and a PR fixing this was also merged 掌握了,但是在它包含补丁之后没有发布。所以我的临时解决方案是直接从 master:
加载 gemgem 'ckeditor', github: 'galetahub/ckeditor', ref: '11d3a5b'