Tag: Bundler

目次

関連ページ

参考情報

概要

  • 使用するgemsを管理するためのツール

使用方法

参考情報

簡単にGemfileだけを使う方法

  • Gemfileを用意する。例えばActiveRecordを単独で使用する場合
    source 'https://rubygems.org'
    
    gem 'activerecord'
    gem 'mysql2'
    
  • インストール。vendor/bundle以下にgemが追加される。
    $ bundle install --path vendor/bundle
  • 使用する。自分のscriptの先頭で以下のようにかいて、ruby hoge.rbのように実行すると、vendor/bundle以下のgemを使ってくれる。
    require "rubygems"
    require "bundler/setup"
    require "active_record"
    

ruby - Are bundle exec and require 'bundler/setup' equivalent? - Stack Overflowに、bundle execとbundle/setupの違いの説明あり。

アプリのひな形を作成

  • gemとしてインストール可能なアプリのひな形を作る事も出来る(-bで実行ファイルも作ってくれる。-tがつくとテストファイルも作ってくれる)
    bundle gem sampleapp -b -t #rspecが適用
    bundle gem sampleapp -b --test=minitest #minitestが適用

Gemfile

requireってなに?

Tips

パス指定の省略

パッケージの命名規則

  • Name your gem - RubyGems Guidesが参考になる。アンダースコアは単語の区切り、ハイフン(ダッシュ)はパッケージ階層として解釈されるので使い分けたほうが良い。
  • パッケージ名にハイフンを使う場合注意が必要 [#z37b810f]
  • Create a Ruby Gem. Real World, play by play. Part 1にもあるようにパッケージ名にaaa-bbbのようにハイフンを挟むとaaa/bbbのような深いフォルダが作成されてしまう。これを避けるためには、ハイフンを使わない、アンダースコアを使う、自分でフォルダ構造を変更するなどの工夫が必要になる。

トラブルシューティング

Gemfileでgitリポジトリを指定したgemが更新されない

  • gemspecでバージョンが上がっていれば「bundle update」で更新できる => 利用する側に手を入れるのが一番よい(と思ったけどだめかも)。さわれない場合vendor/bundleを削除して入れなおすしかない?

gem install bundlerでエラー発生

  • 以下のようなエラーが発生する。
    $ gem install bundler
    ERROR:  Could not find a valid gem 'bundler' (>= 0), here is why:
              Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 state=error: certificate verify failed (https://api.rubygems.org/specs.4.8.gz)
    
  • Gem install fails with SSL certificate connection error · Issue #1736 · rubygems/rubygemsによるとRubyの古いのが原因?たしかに2.3.0だと発生するけど2.4.0だと大丈夫だった。

「because its extensions are not built. Try: gem pristine」エラー

  • Capistranoでデプロイしようとして発生。キャッシュとインストールされたgemファイルの内容が不一致になっている「gem pristine --all」で解消するとの情報もあり。
  • とりあえずエラーではない(警告?)のようなので放置。

bundle installで「Bundler could not find compatible versions for gem "bundler"」

  • bundle install時に以下のようなエラーが表示される。
    Bundler could not find compatible versions for gem "bundler":
      In Gemfile:
        bundler (~> 1.16)
    
      Current Bundler version:
        bundler (2.0.1)
    This Gemfile requires a different version of Bundler.
    
  • エラーメッセージの通りGemfile.lock(およびそのもとになったGemfile)のbunlderのバージョンと、システムのバンドラーのバージョンが異なる。
  • bundler 2.xの互換性がbundler 1.xとないためこのようなトラブル多発(2019/05/03(金))。Gemfile.lockの「BUNDLE WITH」で指定されたバージョンにあわせるか(2.xをアンインストールして1.xをインストールする)
  • RubyGemsの場合.gemspecのbundlerのバージョンを上げても良いかもしれない。

can't find gem bundler (>= 0.a) with executable bundle (Gem::GemNotFoundException)

  • Gemfile.lockの「BUNDLE WITH」で指定されているbundlerのバージョンと実際にインストールされているbunlderのバージョンが異なるのが原因。
  • bundlerがv2.0.0にバージョンアップしてこのエラーが発生するようになった?
  • BUNDLE WITHに指定されているバージョンをインストールするか、Gemfile.lockを削除してupdateする。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-05-09 (木) 21:05:57