问题是因为 Rails assets compile 实际上在每个 CKeditor 文件的 assets 文件上添加了指纹,而 rails-admin 正在寻找文件的非指纹版本。
这个问题只发生在带有 ckeditor 的 rails 4 中。实际上 ckeditor gem 的Readme.md确实提到了这个问题以及如何解决它,但它并不完整。
要解决此问题,您可以编写一个 rake 文件来删除所有指纹并在部署期间运行它。
这是我解决此问题的解决方案。
使用以下代码在 lib/tasks/ckeditor.rake 中创建一个 rake 文件
namespace :ckeditor do
desc 'Create nondigest versions of some ckeditor assets (e.g. moono skin png)'
task :create_nondigest_assets do
fingerprint = /\-[0-9a-f]{32}\./
for file in Dir[File.join('public/assets/ckeditor', '**', '*.js'),
File.join('public/assets/ckeditor', '**', '*.js.gz'),
File.join('public/assets/ckeditor', '**', '*.css'),
File.join('public/assets/ckeditor', '**', '*.png'),
File.join('public/assets/ckeditor', '**', '*.gif')]
next unless file =~ fingerprint
nondigest = file.sub fingerprint, '.' # contents-0d8ffa186a00f5063461bc0ba0d96087.css => contents.css
FileUtils.cp file, nondigest, verbose: true
end
end
end
对于 Capistrano 用户,请确保将其包含在 deploy.rb 中
desc 'copy ckeditor nondigest assets'
task :copy_nondigest_assets, roles: :app do
run "cd #{latest_release} && #{rake} RAILS_ENV=#{rails_env} ckeditor:create_nondigest_assets"
end
after 'deploy:assets:precompile', 'copy_nondigest_assets'
对于 Heroku 用户,您需要在每次签入代码之前手动运行 rake 文件。确保在此之前执行您的 rake assets:precompile。
rake ckeditor:create_nondigest_assets
希望能帮助到你