Rails - 宝石如何与'捆绑'相关

时间:2013-11-02 15:43:56

标签: ruby-on-rails ruby-on-rails-4 rubygems railstutorial.org

我正在从Michael Hartl's website学习Ruby on Rails。我有一个看起来像这样的Gemfile:

source 'https://rubygems.org'
ruby '2.0.0'
#check and remove below if not relevant
#ruby-gemset=railstutorial_rails_4_0

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.0.1'

group :development, :test do
  gem 'sqlite3', '1.3.8'
  gem 'rspec-rails', '2.13.1'
end

group :test do
  gem 'selenium-webdriver', '2.35.1'
  gem 'capybara', '2.1.0'
end
.
.
.

group :doc do
  gem 'sdoc', '0.3.20', require: false
end

group :production do
  gem 'pg', '0.15.1'
  gem 'rails_12factor', '0.0.2'
end

# Use ActiveModel has_secure_password
# gem 'bcrypt-ruby', '~> 3.1.2'

# Use unicorn as the app server
# gem 'unicorn'

# Use Capistrano for deployment
# gem 'capistrano', group: :development

# Use debugger
# gem 'debugger', group: [:development, :test]

为什么这一系列命令是正确的:

`$ bundle install --without production`
`$ bundle update`
`$ bundle install`

首先不应该是bundle update,而是bundle install --without production。为什么要拨打bundle install两次?我认为第二次电话是多余的。

2 个答案:

答案 0 :(得分:1)

我的推荐是

1)做bundle,忘了其余的。对你的学习不重要

2)bundle install

好的,所以对于你目前正在使用的任何版本的ruby,这将获取你的Gemfile并从rubygems.org(该网站)获得这些宝石的正确版本。然后在您的计算机上安装这些宝石,以便在您的计算机上尚不存在该版本时使用您正在使用的ruby版本。如果版本存在,则不需要下载,将能够立即包括gem版本,例如,离线时。

如果你切换ruby版本,那么你通常需要再次捆绑安装,以获得当前正在你的机器上使用的ruby版本的那些宝石的正确版本。

如果您使用rvm之类的工具来管理您的ruby版本,那么这很简单:

cd the_application_directory_for_your_rails_application
rvm use 1.9.3
bundle install

然后切换到ruby 2.0

rvm use 2.0
bundle install

您可以使用

指定特定的ruby版本
rvm use 1.9.3-p448  # e.g. for the -p448 version

您可以使用

在计算机上查看“当前可用的”ruby版本
rvm list rubies

您可以安装特定的红宝石,例如

rvm install 1.9.3-p194

答案 1 :(得分:1)

  

为什么这一系列命令是正确的:

     

$ bundle install --without production $ bundle update $ bundle install

没有上下文,很难回答这个问题 - 但是可以从命令中直接看出它可能不会像一串命令一样尽职尽责地出现。

bundle install --without production完全安装lockfile中的版本,跳过生产组中的任何gem或带有生产标记。这允许您仅安装测试和开发应用程序所需的内容。 (例如,您可能不希望在日志服务中浪费行或污染您的监控服务。)更重要的是,这为您提供了一个已知良好的工作状态,可用于您使用的任何计算机上的开发。

bundle update使用Gemfile中允许的更新版本的gem更新锁文件。如果Gemfile没有精心设计并且依赖项的版本在平均时间内发生了变化,这会破坏您的应用程序。 (所以要回答你的其他问题,不,你不会在update之前运行install。)

bundle install最有可能说明部署生产应用程序的正确命令:跳过生产宝石并立即转向安装生产宝石没有任何意义。

  

这些正在下载的内容实际上已保存?他们在哪   正在安装?在我的电脑上?我从未到过他们真正去过的地方   隐藏。也许在我的应用程序文件夹但到底在哪里?

在您的计算机上,在Ruby安装中。 Ruby,如Perl和Python,专门为附加库维护其目录结构的一部分。

例如,在Ruby 2.0.0中,它们居住在与[RUBY_ROOT]/lib/ruby/gems/2.0.0/gems类似的地方。出于特定目的,还可以在Rails应用程序的目录中本地安装它们。