我是一个初学者到Ruby on Rails和我使用Rails 3.0.9。
是有什么区别Gemfile
和Gemfile.lock
Rails中?
我是一个初学者到Ruby on Rails和我使用Rails 3.0.9。
是有什么区别Gemfile
和Gemfile.lock
Rails中?
该Gemfile
是,您可以指定要使用的宝石,并允许您指定哪个版本。
该Gemfile.lock
文件是捆扎机记录已安装的确切版本。 这样,当相同的库/项目加载另一台机器上,运行bundle install
将着眼于Gemfile.lock
安装完全相同的版本,而不是仅仅使用Gemfile
并安装最新版本。 (运行在不同的机器不同的版本可能会导致断测试等)你不应该曾经有直接编辑锁定文件。
退房捆扎机的目的和理由 ,特别是检查你的代码版本控制部分。
通常我们写的依赖关系的Gemfile为:
gem "nokogiri", "~> 1.4.4"
gem 'bcrypt-ruby', '~> 3.0.0'
gem 'uglifier', '>= 1.2.3'
..
在这里,你基本上是说:“ 我想引入nokogiri只要它比1.4.4版本高 ”等,现在假设我有我的设置Gemfile
8个月前 ,我成功地安装我的这个要求的应用程序。 8个月前引入nokogiri版本是1.4.4。 我的Rails应用在没有与此版本的任何问题,运行完美。
现在想来,我试图建立具有相同Gemfile
。 但是,如果我们看一下引入nokogiri版本 ,我们看到,当前稳定的版本已更改为1.4.9。 这意味着,如果我们试图构建,打包器将安装引入nokogiri的1.4.9版本(假设我们没有Gemfile.lock
)。
正如你看到的,如果你没有任何Gemfile.lock
并运行:
bundle install
然后当前使用的宝石可以在任何时间不同 。 您的应用程序使用的版本1.4.4,它工作8个月前没有任何问题,但如果你现在尝试构建它,你得到的版本1.4.9。 也许这与最新版本打破nokogiri
,你1.4.4使用的真棒功能并不多用,等等。
为了防止这种问题Gemfile.lock
使用。 在Gemfile.lock
唯一确切的版本被写入,因此只有这些将被安装。 这意味着如果你有一个发布应用程式Gemfile.lock
,每台机器将安装和最重要的,他们都得到相同的版本相同的宝石。 这会给你一个稳定的,共同部署堆栈。
它会自动创建的第一个:
bundle install
命令。 当你运行每次bundle install
,包会首先查找Gemfile.lock
并安装指定有宝石。 这是发布你的项目中这个文件,以一贯性和稳定性提供了一个习惯。
如果你感到快乐与最新版本的应用程序比你可以更新Gemfile.lock
。 只是反映变化Gemfile
。 这意味着改变依赖于新的精确版本Gemfile
。 该运行后:
bundle install
这将更新您Gemfile.lock
与您的最新的应用程序版本。
该Gemfile.lock的
当您运行包安装,捆扎机将持续存在,你使用的所有宝石(包括在Gemfile中(5)中指定的宝石的依赖)到一个名为Gemfile.lock的文件的全名和版本。
捆绑使用的所有后续调用这个文件捆绑安装,保证你总是使用相同的确切的代码,甚至跨机器的应用程序移动。
因为单向依赖分辨率的作品,即使是看似很小的变化(例如,更新在你的Gemfile宝石的依赖点释放(5))可能会导致被需要完全不同的宝石,以满足所有的依赖关系。
因此,你应该检查你Gemfile.lock的版本控制。 如果你不这样做,每次检查出你的资料库(包括生产服务器)的机器将再次解决所有的依赖,这将导致如果正在使用不同版本的第三方代码的任何在Gemfile中的宝石(5)或任何的他们依赖已更新。