Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

`Irb`、` Bundle Exec Irb`、 `Bundle Console`、` Rails Console`の違いは何ですか?

RubyまたはRailsコンソールを起動する方法はたくさんあります:irbbundle exec irbbundle console 、およびrails console 最も一般的なもののいくつかです。それらは似ているように見えますが、それぞれ動作が少し異なります。

これらの違いがわからない場合は、いくつかの問題が発生します。 ActiveRecordモデルをデータベースに接続できない可能性があります。または、ファイルが必要で、間違ったバージョンを取得します。または、利用可能だと思っていたライブラリは利用できませんでした。

適切なコンソールを適切なタイミングで使用していることをどのように確認しますか?

バンドラーと非バンドラー

irb 単なるRubyコンソールです。 Gemfileは関係ありません 。コアRubyライブラリ以外は何もロードしません。他に必要なものは、requireする必要があります 。

gem installを使用してgemをインストールする場合 、irb内で要求できます 。 bundle installを使用した場合 、あなたはかもしれない Bundlerがどこに置いたかに応じて、それを要求することができます。 (bundle install --pathのようなものを実行すると、BundlerはRubyのgemパスの外にgemを配置することがあります。 またはbundle install --deployment

irb以降 Gemfileを無視します 、Gemfile.lock内のバージョン 関係ありません。 irb 見つけた宝石の最新バージョンをロードします:

~/Source/testapps/consoles[master *] jweiss$ gem list rails

*** LOCAL GEMS ***
rails (4.2.0.beta2, 4.2.0.beta1, 4.1.5, 4.1.1)

~/Source/testapps/consoles jweiss$ cat Gemfile | grep rails
gem 'rails', '4.1.5'

~/Source/testapps/consoles jweiss$ irb
irb(main):001:0> require 'rails'
=> true
irb(main):002:0> Rails.version
=> "4.2.0.beta2"

予期しない場合、これによりコードに非常に奇妙な問題が発生する可能性があります。

irb コアRubyファイルをいじっている場合に最適です。高速で、セットアップは必要ありません。

ただし、Gemfileを使用する場合 コンソールを実行するときは、bundle exec irbを実行します 代わりは。 bundle exec irbを許可します Bundlerが知っているgemをロードし、のみ Bundlerが知っている宝石:

~/Source/testapps/consoles jweiss$ bundle exec irb
irb(main):001:0> require 'rails'
=> true
irb(main):002:0> Rails.version
=> "4.1.5"

探していたRailsバージョンを正確に入手しました。

bundler / setup vs Bundler.require

bundle consoleはいつ実行しますか bundle exec irbの代わりに ?

bundle exec irb Gemfile.lock内のgemのみを要求できるように設定します 。

bundle console さらに一歩進んでいます。 bundle consoleを実行する場合 、Gemfileにgemを要求する必要はありません 。それらはすでにあなたに必要です:

~/Source/testapps/consoles jweiss$ bundle exec irb
irb(main):001:0> Rails.version
NameError: uninitialized constant Rails
	from (irb):1
	from /usr/local/bin/irb:11:in `<main>'

~/Source/testapps/consoles jweiss$ bundle console
irb(main):001:0> Rails.version
=> "4.1.5"

Bundler.requireを呼び出した場合にも、この動作が発生する可能性があります bundle exec irb内 コンソール。 Gemfile内の任意のgem require: falseとマークされていない 自動的に必要になり、余分な作業なしで使用できるようになります。 Gemfileを使用してプロジェクトに取り組んでいる場合 、それは信じられないほど便利です。

レールへのアクセス

考慮すべき違いがまだ1つあります。bundle console およびrails console

~/Source/testapps/consoles jweiss$ bundle console
irb(main):001:0> Rails.application
=> nil

~/Source/testapps/consoles jweiss$ rails console
Loading development environment (Rails 4.1.5)
irb(main):001:0> Rails.application
=> #<Consoles::Application:0x007f8db4d5ab30 @_all_autoload_paths=["/Users/jweiss...

bundle console たくさんの宝石が必要です。 rails console これらのgemが必要ですが、Rails環境全体をロードし、自動ロードを設定し、アプリケーションを初期化し、完全なRails環境を試してみることができます。

Railsコンソールのようなものはbundle consoleから入手できます。 config/environment.rbが必要な場合 :

~/Source/testapps/consoles jweiss$ bundle console
irb(main):001:0> Rails.application
=> nil
irb(main):002:0> require_relative 'config/environment.rb'
=> true
irb(main):003:0> Rails.application
=> #<Consoles::Application:0x007fd264f0b7c8 @_all_autoload_paths=["/Users/jweiss...

それぞれ、もう少し複雑です

要約すると:

  • irb 基本的なRubyコンソールです。 Gemfileは無視されます 、およびコアRubyクラスのみがrequireなしでアクセス可能です -それらを。 BundlerがRubyGemsのロードパスの外にインストールするgemを簡単にロードすることはできません。

  • bundle exec irb irbのようなものです 、bundler/setupも必要な場合 。 Gemfile.lockにあるgemのみを簡単に要求できます 、ただし、Bundlerがどこに置いても、これらの宝石をロードできます。

  • bundle console bundle exec irbのようなものです 、Bundler.requireも呼び出した場合 。 Gemfile内のすべてのgem 、require: falseとマークされているものを除く 、それらを必要とせずに使用することができます。独自のgemを作成する場合や、Rails以外のコードで作業する場合に非常に便利です。

  • rails console bundle consoleを実行するようなものです Railsアプリ内で、config/environment.rbも必要な場合 。 Railsアプリ全体で遊ぶことができ、自動ロードとデータベース接続が機能し、すべてが期待どおりに接続されます。 Railsアプリで作業している場合、これは最も便利な種類のコンソールです。

これらのコンソール間にはそれほど多くの違いはありません。そして、これらの違いのほとんどはそれほど大きくはありませんが(ああ、このファイルは必要ありませんか?もっと必要です!)、何が起こっているのかわからない場合、他の人は完全に腹立たしくなります。 (なぜこれが間違ったバージョンのRakeを再度ロードするのですか!?)

ただし、これらの各コンソールの背後にある考え方を知っていれば、適切な種類のコンソールを適切なタイミングで使用できるようになります。そして、必要なすべてのライブラリは、必要なときに近くにあります。


  1. OneDrive と OneDrive for Business の違いは?

    Microsoft の OneDrive クラウド ストレージ サービスを使用すると、どこにいてもファイルにアクセスできます。同社は、実際には 2 つの異なるが名前が似ている OneDrive のバージョンを維持しています。 OneDrive を使用するか、別の OneDrive for Business を使用するかは、クラウドに保存する内容と、それにアクセスする方法によって異なります。 「OneDrive」は、マイクロソフトのコンシューマ向けクラウドです。個人の Outlook アカウントに表示され、Windows 10 に自動的にリンクされます。OneDrive は、自分自身や友人や家

  2. Windows 10 Home と Pro の違いは?

    新しいデバイスを検討している場合でも、自分で Windows を購入する場合でも、Windows 10 Home と Pro の違いに注意することをお勧めします。どちらも表示されていない場合は、製品に Windows 10 Home が付属していると想定してください。 「ホーム」エディションは「Windows 10 Standard」というより適切なタイトルにすることができるという点で、ネーミングはおそらく少し役に立たない.これは、価格が 1,000 ポンド未満のほとんどの Windows デバイスに搭載されており、オペレーティング システムのコア機能がすべて含まれています。 Pro ディ