Computer >> 컴퓨터 >  >> 프로그램 작성 >> Ruby

`Irb`, `Bundle Exec Irb`, `Bundle Console` 및 `Rails Console`의 차이점은 무엇입니까?

Ruby 또는 Rails 콘솔을 시작하는 방법에는 여러 가지가 있습니다. irb , bundle exec irb , bundle consolerails console 가장 일반적인 것 중 일부입니다. 비슷해 보이지만 각각 작동 방식이 조금씩 다릅니다.

이러한 차이점이 무엇인지 모르는 경우 몇 가지 문제가 발생합니다. ActiveRecord 모델을 데이터베이스에 연결하지 못할 수도 있습니다. 또는 파일이 필요하고 잘못된 버전을 얻을 수 있습니다. 또는 사용 가능하다고 생각했던 라이브러리가 그렇지 않았습니다.

적시에 올바른 콘솔을 사용하고 있는지 어떻게 확인하나요?

번들러와 비번들러

irb 단순한 Ruby 콘솔입니다. Gemfile은 상관하지 않습니다. . 핵심 Ruby 라이브러리 외에는 아무 것도 로드하지 않습니다. 그 외 원하는 것은 require입니다. .

gem install을 사용하여 gem을 설치하는 경우 , irb 내에서 요구할 수 있습니다. . bundle install를 사용한 경우 , 당신은 할 수 있습니다 Bundler가 어디에 두었느냐에 따라 요구할 수 있습니다. (번들러는 bundle install --path와 같은 것을 실행하면 때때로 Ruby의 gem 경로 외부에 gem을 넣습니다. 또는 bundle install --deployment ).

irb 이후 Gemfile 무시 , Gemfile.lock 내의 버전 상관없어. irb 찾을 수 있는 최신 버전의 gem을 로드합니다.

~/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가 알고 있는 보석을 로드하려면 보석 번들러가 알고 있는 사항:

~/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.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로 프로젝트 작업을 할 때 , 정말 편리합니다.

레일 액세스

고려해야 할 한 가지 차이점이 있습니다. bundle consolerails 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 환경도 제공합니다.

bundle console에서 Rails 콘솔과 같은 것을 얻을 수 있습니다. 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를 다시 로드하는 것입니까!?)

그러나 이러한 각 콘솔의 이면에 있는 아이디어를 알고 있다면 적시에 적절한 종류의 콘솔을 사용할 수 있습니다. 그리고 필요한 모든 라이브러리는 필요할 때 가까이에 있을 것입니다.