皆さん、rails-assets は使っていますか?
rails-assets は、Gemfile で js や css のライブラリを指定して、バージョン管理や依存の解決などをしてくれるとても便利なサービスです。
しかし最近ではその役目を終えたとして、最大で今年末でサポートを終了するとしています。
Future of rails-assets · Issue #291 · rails-assets/rails-assets
そしてもう閉じることが決まったプロジェクトだからなのか、あまり活発にメンテナンスをしていないような印象を受けます。昨年からrails-assets を運営しているサーバが不安定になることが多く、rails-assets に依存しているプロジェクトを持つ会社さんは、bundle update やデプロイに失敗して辛い日々を過ごしたのではないでしょうか。
そんな折、明日 2016/1/19 にサーバのSSL証明書の期限が切れることがわかりました。証明書の期限延長対応がされるまで、困ったことになりますね…><
(追記) 証明書は lets'encrypt を利用しており、(おそらく)自動で更新されるようになっているようです。よかったですね。 SSL certificate for rails-assets.org will expire soon · Issue #306 · rails-assets/rails-assets
僕がお手伝いしているクリニカルプラットフォームさんでも rails-assets を利用しており、昨年 rails-assets が不安定になった際に、非常用として回避策を用意しておきました。
その回避策をシェアしておきますので、僕たち同様に困っている方がいらっしゃったらご利用下さい。以下は クリニカルプラットフォームさんの esa に @masa_iwasaki がまとめてくれた記事を改変したものです。
rails-assets.org が不安定な場合
rails-assets.org へ接続ができない場合、 bundle install
が終了せず最悪デプロイができない状況に陥ります。
急いでいる場合は、rails-assetsのリポジトリからソースコードを手に入れ、開発環境でgemパッケージをビルドし、外部に公開してそのURLをGemfileで参照するという手段があります。ただし、多少の時間はかかりますので、時間に余裕を持って取り組むのがベストです。
rails-assetsでgem生成
rails-assets
の READMEに従ってセットアップします。redis さえ動いていれば、最後の foreman start
は必要ありません。
git clone git@github.com:rails-assets/rails-assets.git && cd rails-assets bundle install && npm install cp config/database{.sample,}.yml cp config/application{.sample,}.yml # edit config/database.yml and config/application.yml if necessary. bin/rake db:setup foreman start
手元でgemを以下のようにビルドします。各assetのバージョンは各プロジェクトのGemfile.lock
を参照して取得してください。
bundle exec rake 'component:convert[jquery, 2.1.4]' bundle exec rake 'component:convert[jquery-ui, 1.11.4]'
↑の作業を楽にするために、Gemfile.lock をパースして、実行すべき rake タスクを出力する簡単なスクリプトを書きましたのでご利用下さい。parse_gemfile_lock.rb
のように保存して ruby parse_gemfile_lock.rb Gemfile.lock
で実行できます。
files = ARGF.readlines.grep /rails-assets-/ files.map(&:strip!) files.reject! { |file| file[-1] == '!' || file.match(/[>=<]/) } files.each do |file| name, version = file.split(' ') name.gsub!(/rails-assets-/, '') version.gsub!(/[\(\)]/, '') puts "bundle exec rake 'component:convert[#{name}, #{version}]'" end
外部への公開
rails-assets
のワーキングコピー直下にあるpublic
ディレクトリ以下をrsync
等を使って外部に公開します(public以下のファイルさえあれば、gem serverとして機能します)。公開先はどこでもいいですが、最も簡単なのはAWS S3を利用することでしょう。
gem sourceの変更
プロジェクトのルートディレクトリに移動し、Gemfile
中の https://rails-assets.org
を http://公開URL
に変更して、bundle install
を走らせれば終了です。
ローカル環境で確認したい場合
localにgemがすでにインストールされている場合、公開URLのものは当然インストールしてくれません。もし、ちゃんとインストールが出来ることをローカル環境で確認したい場合は、インストール済みのrails-assets-*
系gemを削除してください。ざっくりと全部抜くのであれば、以下のようなコマンドで削除できます。
$ gem list --no-version | grep rails-assets- | xargs gem uninstall
最後に
役に立った!と思ったら下記エントリの応援や応募などをお願いします (\( ⁰⊖⁰)/)
犬の手も借りたい!ヘルスケアITのスタートアップがRubyエンジニア募集! - クリニカル・プラットフォーム株式会社の求人 - Wantedly