「RailsプロジェクトにBowerを導入してHerokuへデプロイする」という素晴らしい記事を見て、PadrinoでもBowerでアセット(画像とかCSSファイルとかJavaScriptファイルとか)を管理してみようと思いました。
苦労もしたので、書き留めておきます。
プラン
Padrino::Sprocketsを使うことにします。やっていることは簡単なので自分で書いてもいいくらいなのですが、書いたものをどこに置けばいいのか?という決断をする決断リソースがもったいないので、gemに頼っちゃいます。
パスの決定
URI上のパスは、/assets
以下で、アセットを提供することにします。
ファイルシステム上では、/app/assets
以下をアセットとして提供して、Bowerで入れるコンポーネントは/app/assets/components
にインストールすることにします。
Padrino::SproketsのデフォルトはPadrino.root
直下の
/assets/images
/assets/javascripts
/assets/stylesheets
にアセットを置くようになっていますが、折角Padrinoがデフォルトで/app/assets
をアセット置き場にしているので、そちらを使います。
最初はpublic
以下にBowerのアセットをインストールしようと思ったのですが、READMEなんかのアセットとは関係ないファイルも見えるようになってしまうのと、階層が深くなてしまうのを嫌って、例えCoffeeScriptやSCSSのコンパイルがなくても、Sprocketsを通すようにしました。
アセットのインストール
Bowerを使ってアセットをインストールします。
{
"name": "bibid",
"dependencies": {
"bibi": "git://github.com/satorumurmur/bibi"
}
}
{
"directory": "app/assets/components"
}
$ bower install
で、app/assets/components
以下にアセットが入ります。
RubyGemsのインストール
必要なgemをインストールします。
# :
gem 'padrino-sprockets', :require => 'padrino/sprockets'
$ bundle install --path=deps
アプリケーションの設定
Padrino::Sprocketsの設定をします。
module Bibid
class App < Padrino::Application
# :
# :
register Padrino::Sprockets
sprockets url: 'assets',
root: Padrino.root('app'),
paths: %w[assets/components]
# :
# :
これで、例えばhttp://localhost:3000/assets/bibi/bib/i.js
にアクセスすると、ちゃんとJavaScriptが表示されます。
なんか、書いてみると、簡単ですね、色々設定弄ったリソース読んだりして苦労したんですが……。