1

我正在从Michael Hartl 的网站学习 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 updatebundle install --without production。为什么要打bundle install两次?我认为第二个电话是多余的。

4

2 回答 2

1

我的建议是

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

2)bundle install

好的,所以对于您当前使用的任何版本的 ruby​​,这将获取您的 Gemfile 并从 ruby​​gems.org(该站点)获取这些 gem 的正确版本。然后在您的机器上为您正在使用的 ruby​​ 版本安装这些 gem,如果该版本在您的机器上尚不存在。如果版本存在,则无需下载,gem 版本将能够立即包含在内,例如离线时。

如果您切换 ruby​​ 版本,那么您通常需要再次捆绑安装,以便为您的机器上当前使用的 ruby​​ 版本获取这些 gem 的正确版本。

如果您使用诸如 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
于 2013-11-02T15:49:07.007 回答
1

为什么这个命令序列是正确的:

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

没有上下文,很难回答这个问题——但人们可以从命令中直觉到,它可能不会像一串命令一样被忠实地执行。

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

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

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

这些下载的东西实际上保存在哪里?它们安装在哪里?在我的电脑上?我从来没有得到他们实际去或隐藏的地方。也许在我的应用程序文件夹中?但具体在哪里?

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

例如,在 Ruby 2.0.0 中,它们存在于类似于[RUBY_ROOT]/lib/ruby/gems/2.0.0/gems. 出于非常特定的目的,也可以将它们本地安装在 Rails 应用程序的目录中。

于 2013-11-02T16:22:42.537 回答