DesignAssembler

備忘録に近い

boot.rb

bundlerの読み込みと設定を担当しているファイルであり、Railsの起動時(コンソールやサーバー)に実行されます。

中身はこうなっています。

ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
require 'bundler/setup' # Set up gems listed in the Gemfile.

Gemfileの場所をENV['BUNDLE_GEMFILE']に格納してbundler/setupをrequireしてます。

bundler/setupを見てみます。

https://github.com/bundler/bundler/blob/master/lib/bundler/setup.rb

とりあえずBundler.setupしてますね。

Bundler.setupはGemfile.lockの中身です。railsコンソールで実行するとこうなります。

f:id:hyottokoaloha:20160224121433p:plain

よって、boot.rbはrails起動時にgemの場所を教える役割を負っています。

また、このboot.rbはconfig/application.rbやbin/railsから呼ばれています。

つまり、bin/rails g controllerする時なんかも呼ばれているみたいですね。

試しにconfig/boot.rbの中身を変更して確認してみます。

#config/boot.rb
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
puts "******************************"
puts ENV['BUNDLE_GEMFILE']
puts "******************************"
require 'bundler/setup' # Set up gems listed in the Gemfile.

これで、rails g modelを実行します。

$ rails g model user name:string address:string
******************************
/Users/asmsuechan/rails/boot_test/Gemfile
******************************
Running via Spring preloader in process 39902
      invoke  active_record
      create    db/migrate/20160224023804_create_users.rb
      create    app/models/user.rb
      invoke    test_unit
      create      test/models/user_test.rb
      create      test/fixtures/users.yml

確認できました。

参考

railsguides.jp