rails_admin找不到ckeditor.js文件

时间:2013-10-09 09:59:05

标签: ckeditor ruby-on-rails-4 rails-admin

我正在尝试在DigitalOcean服务器上的Rails 4.0中使用ckeditor(4.0.6)和使用rails_admin(0.5.0)。

我已将它包含在rails_admin.rb初始化程序中,如下所示,它在本地生产模式下工作

  config.model Faq do
    field :display_order
    field :question
    field :answer, :ck_editor  
  end

然而在DigitalOcean上,当我进入Rails_Admin并尝试创建一个新的FAQ对象时,它不会加载ckeditor,因为它无法找到js。

 http://dummy.com/assets/ckeditor/ckeditor.js?_=1381313244552 404 (Not Found)
rails_admin-5daa9b7b76a226bdfa46a07fdaf2d77d.js:3

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

我不知道,你有预编译资产吗?

  

如果您正在从Heroku等其他类型的主机切换,那么   可能会忘记您必须手动预编译您的资产。你'再   幸运的是,它很容易!

     

RAILS_ENV =生产佣金资产:预编译如果遇到问题,   尝试运行此代码:

     

RAILS_ENV =生产佣金资产:预编译:主要

来自https://www.digitalocean.com/community/articles/how-to-launch-your-ruby-on-rails-app-with-the-digitalocean-one-click-image

答案 1 :(得分:0)

问题是因为Rails资产编译实际上在每个CKeditor文件的资产文件中添加了指纹,而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资产:在此之前预编译。

rake ckeditor:create_nondigest_assets

希望有所帮助