Site cover image
Ruby on Rails エンジンにおけるアセットパイプラインの設定方法

Ruby on Railsにおいて、アセットパイプラインはデフォルトで有効になっており、JavaScriptファイルやCSSファイルを圧縮して配布するのに使われます。

しかし、アセットパイプラインはライブラリ間のバージョン違いによって躓きやすく、「エンジン」を使う場合には、設定に少し戸惑うかもしれません。

このエントリでは、Ruby on Rails 6のエンジンでアセットパイプラインを使うための設定を説明します。

エンジンについては下記チュートリアルを参照してください。

以下、エンジン名はチュートリアルで登場する Blorgh を使って説明します。

アセットパイプラインを使用するためにはsprocketsが必要です。

コメントアウトされていないか確認します。

require "sprockets/railtie"
blorgh/bin/rails

テストディレクトリ以下にあるdummyアプリケーションの方も併せて確認しておきましょう。

require "sprockets/railtie"
blorgh/spec/dummy/config/application.rb

レイアウトのheadタグ内に、生成されたCSSとJavaScriptを読み込むタグを追加します。

<!DOCTYPE html>
<html>
<head>
  ...

  <%= stylesheet_link_tag "blorgh/application" %>
  <%= javascript_include_tag "blorgh/application" %>
</head>
...

アセットの配置場所をblorgh/app/assets/にするために、エンジンにパスの設定を追加します。

module Blorgh
  class Engine < ::Rails::Engine
    isolate_namespace Blorgh

    initializer "blorgh.assets.precompile" do |app|
      app.config.assets.paths << File.expand_path("../../app/assets", __dir__)
      app.config.assets.precompile += ["blorgh/application.css", "blorgh/application.js"]
    end
  end
end
blorgh/lib/blorgh/engine.rb

もし、削除ボタンを押した際にlink_toメソッドで確認ダイアログを出したい場合、そのままだとDELETEではなくGETでリクエストしてしまいます。

DELETEメソッドとしてリクエストしたい場合(実体はPOST)、Ruby on Rails 6 ではrails-ujsを手動で追加してあげる必要があります。

rails-ujsについては下記の記事がとても参考になるのでぜひご覧ください。

...
//= require rails-ujs ←追加
//= require_tree .
blorgh/app/assets/javascripts/blorgh/application.js

これでエンジン以下でアセットパイプラインが使えるようになりました。

以上です。

このエントリでは、Ruby on Rails 6のエンジンでアセットパイプラインを使うための設定を説明しました。

Thank you!
Thank you!
URLをコピーしました

コメントを送る

コメントはブログオーナーのみ閲覧できます