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

问题描述 投票:1回答:2

我正在从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?我认为第二次电话是多余的。

ruby-on-rails ruby-on-rails-4 rubygems railstutorial.org
2个回答
1
投票

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

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

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

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

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

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

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

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

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


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
© www.soinside.com 2019 - 2024. All rights reserved.