Sha*_*h c 119 ruby ruby-on-rails bundler gemfile gemfile.lock
我是Ruby on Rails的初学者,我使用的是Rails 3.0.9.
Gemfile和Gemfile.lockRails有什么区别?
Dyl*_*kow 151
的Gemfile是,您可以指定要使用的宝石,并允许您指定哪个版本.
该Gemfile.lock文件是Bundler记录已安装的确切版本的位置.这样,当在另一台机器上加载相同的库/项目时,运行bundle install将查看Gemfile.lock并安装完全相同的版本,而不是仅使用Gemfile和安装最新版本.(在不同的机器上运行不同的版本可能会导致测试中断等).您不应该直接编辑锁定文件.
查看Bundler的用途和原理,特别是将代码检查到版本控制部分.
Fat*_*lan 149
通常我们在Gemfile中编写依赖项:
gem "nokogiri", "~> 1.4.4"
gem 'bcrypt-ruby', '~> 3.0.0'
gem 'uglifier', '>= 1.2.3'
..
Run Code Online (Sandbox Code Playgroud)
在这里你基本上说:" 我想要nokogiri,只要它比版本1.4.4更大 ",等等.现在假设我已经设置了我的Gemfile 8个月前,我成功设置了我的应用程序这个要求.8个月前nokogiri版本是1.4.4.我的rails应用程序运行完美,没有任何问题.
现在想想我正在努力建立同样的东西Gemfile.但是如果我们看看nokogiri版本,我们会看到当前的稳定版本已经变为1.4.9.这意味着如果我们尝试构建,bundler将安装版本1.4.9的nokogiri(假设我们没有Gemfile.lock).
如你所见,如果你没有Gemfile.lock并运行:
bundle install
Run Code Online (Sandbox Code Playgroud)
那么目前使用的宝石可以随时变化.您的应用程序使用的是1.4.4版,它在8个月前运行没有任何问题,但如果您现在尝试构建它,则会获得1.4.9版本.也许它已经被最新版本打破了nokogiri,你使用1.4.4的强大功能并不是更多,等等.
为了防止出现这种问题Gemfile.lock.在Gemfile.lock只有确切的版本被写入,因此只有这些将被安装.这意味着如果您使用a分发您的应用程序Gemfile.lock,则每台计算机都将安装相同的gem,最重要的是它们都会获得相同的版本.这将为您提供稳定且通用的部署堆栈.
它是使用第一个自动创建的:
bundle install
Run Code Online (Sandbox Code Playgroud)
命令.在每次运行之后bundle install,bundle将首先查找Gemfile.lock并安装那里指定的gem.在您的项目中分发此文件以提供始终如一的稳定性是一种习惯.
如果您对最新版本的应用感到满意,那么您可以更新Gemfile.lock.只需反映您的更改即可Gemfile.这意味着将依赖项更改为新的确切版本Gemfile.之后运行:
bundle install
Run Code Online (Sandbox Code Playgroud)
这将使Gemfile.lock您的最新版本的应用程序更新.
Gemfile.lock
当您运行 bundle install 时,Bundler 会将您使用的所有 gem 的全名和版本(包括 Gemfile(5) 中指定的 gem 的依赖项)保存到一个名为 Gemfile.lock 的文件中。
Bundler 在所有后续调用 bundle install 中使用此文件,这保证您始终使用完全相同的代码,即使您的应用程序在机器之间移动。
由于依赖项解析的工作方式,即使是看似很小的更改(例如,对 Gemfile(5) 中 gem 依赖项的点发布更新)也可能导致需要完全不同的 gem 来满足所有依赖项。
因此,您应该将 Gemfile.lock 签入版本控制。如果不这样做,检查您的存储库(包括您的生产服务器)的每台机器将再次解析所有依赖项,这将导致使用不同版本的第三方代码,如果 Gemfile(5) 中的任何 gem 或任何他们的依赖项已更新。
| 归档时间: |
|
| 查看次数: |
52387 次 |
| 最近记录: |