問題の背景
Railsアプリケーションにおいて、ckeditorを利用する際にSprockets::FileNotFoundエラーが発生する場合があります。具体的には、次のようなエラーメッセージが表示されます。
Sprockets::FileNotFound at /admin/users/sign_in
couldn't find file 'ckeditor/init' with type 'application/javascript'
Checked in these paths: ...
このエラーは、アセットパイプラインでckeditor/initファイルが見つからないために発生します。ckeditorのバージョンとSprocketsの互換性の問題が原因であることが多く、公式リポジトリでも議論されています(Issue #881)。
解決方法
この問題を解決するには、いくつかのアプローチがありますが、互換性のあるバージョンへのダウングレードとアセットパイプラインの設定を変更する方法が推奨されています。
1. ckeditorのバージョンを指定してダウングレード
まず、Gemfileを編集してckeditorの安定したバージョンに固定します。Issueで推奨されているバージョンやRailsバージョンに応じて、以下のようにバージョン指定を行います。ここでは、互換性が確認されているバージョン4.2.4を例にしています。
gem 'ckeditor', '~> 4.2.4'
変更後にbundle installを実行します。
bundle install
2. アセットパイプラインにckeditor/initを追加
エラーの原因であるckeditor/initを正しく読み込むために、app/assets/javascripts/application.jsに次の行を追加します。
//= require ckeditor/init
3. プリコンパイル設定の変更
Sprocketsがアセットを見つけられるように、config/initializers/assets.rbに以下を追加してckeditor関連ファイルをプリコンパイル対象に含めます。
Rails.application.config.assets.precompile += %w[ckeditor/*]
4. アセットの再プリコンパイル
最後に、アセットを再プリコンパイルして、ckeditorのアセットをRailsアプリケーションで使用できるようにします。
rails assets:precompile
5. サーバーの再起動と動作確認
サーバーを再起動し、エラーが解消されていることを確認します。
rails s
まとめ
これらの手順により、ckeditorの読み込みエラーを解消し、Railsアプリケーションで正常に利用できるようになります。詳細はIssue #881にて議論されていますが、ここで紹介した手順で大半のケースで解決できます。