`
fantaxy025025
  • 浏览: 1314018 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

Rails_Gemfile_Bundle_是否需要指定gem的版本_多机器运行环境一致问题_Gems版本保持一致

 
阅读更多

 Rails_Gemfile_Bundle_是否需要制定gem的版本_多机器运行环境一致问题_Gems版本保持一致

 

Rails目录下有两个文件,Gemfile和Gemfile.lock

Gemfile中,很多gem都指定了版本,但也有些麽有指定版本。

所以问题出来了:

为什么有些指定,有些不指定。

那些没有指定版本的gem包,安装后,到底装的什么版本?

部署多台服务器,这些gems包能保持版本一致么?

 

 

先了解下rubygems的版本规范,可以看这里,或者查找下pessimistic version constraint 或者 semantic_versioning。

这样就知道,Gemfile里面指定了=version的,肯定会用指定的版本。

而使用:gem 'mysql2', '~> 0.3.10'  或者  'rspec-rails', '>= 2.12.2' 版本的,将可能导致版本升级。

bundle在控制版本的时候,有一套复杂机制,毕竟版本冲突总是可能出现的,maven等工具也是有的。

一旦运行完毕,版本基本就确定了,会存入Gemfile.lock

之后除非自己手动修改版本,否则不会更新版本了。

但是一旦运行 bundle update,就会重新计算并对比gem仓库的最新版本。也就是说,若不手动修改版本,并且不手动运行update操作,这些版本就会固定下来。

 

如果不想有任何改变,也担心不小心运行了update操作,可以用bundle lock锁定,除非unlock,否则无忧了。

 

部署多台服务器,这些gems包能保持版本一致么?

这个看下一篇吧。 

 

特例:从github上拿来的gem库

Bundler adds the ability to use gems directly from git repositories. Setting them up is as easy as adding a gem to your Gemfile. 

使用的一个好方式是自己fork一个,便于管理等:Using the very latest version of a gem (or even a fork) is just as easy as using an official release.

但是Bundle并不能很好的管理这种gem:Because Rubygems lacks the ability to handle gems from git, any gems installed from a git repository will not show up in gem list

最要命的是,每次都会检查线上的更新,老提示你install。

 

什么好办法,除了自己fork

Local Git Repos

 

这种时候,可以指定版本,别让他自动升级。

Specify that a git repository should use a particular ref, branch, or tag
:git => 'git://github.com/rails/rails.git', :ref => '4aded' 
:git => 'git://github.com/rails/rails.git', :branch => '2-3-stable' 
:git => 'git://github.com/rails/rails.git', :tag => 'v2.3.5'

 

小结:

bundle还是相当友好的。正确理解基础上,基本不会出问题了。 

 

prefer:

http://stackoverflow.com/questions/9265213/should-i-specify-exact-versions-in-my-gemfile

http://stackoverflow.com/questions/4292905/what-is-the-difference-between-and-when-specifying-rubygem-in-gemfile

http://stackoverflow.com/questions/9265213/should-i-specify-exact-versions-in-my-gemfile

http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/

http://bundler.io/v1.3/git.html

 

 

 

+

+

+

=

+

=

+

 

 

分享到:
评论

相关推荐

    rails-4.2.0-gems

    Rails 4.2.0 是一个非常重要的版本,在Ruby on Rails框架的历史中占据了显著位置。这个版本引入了许多新特性、改进和性能优化,为开发者提供了更高效和灵活的开发环境。Ruby 4.2.0是这个框架所依赖的编程语言的一个...

    rails _sunspot 学习笔记

    1. **Ruby on Rails 3**:本文档主要针对 Rails 3 版本。 2. **Solr**:全文检索引擎,Sunspot 依赖于 Solr 来实现其功能。 3. **Sunspot gem**:Sunspot 的核心 gem,通过这个 gem 可以轻松配置和使用 Sunspot 功能...

    ruby gem 命令参考(狂刀整理)

    - `bundle exec [command]`: 在 Gem 环境下执行命令,确保使用的是 Gemfile 中指定的版本。 8. **Gem 的版本管理** - `gem 'gem_name', '~> x.y.z'`: 强制 Gem 版本在 x.y.z 与 x.y+1.0 之间。 - `gem 'gem_name...

    rails_入门详细笔记(官网翻译).

    在开发过程中,可能会需要安装一些外部依赖的 gems,可以通过执行 `$ bundle install` 命令来安装 Gemfile 中列出的所有 gems。 #### 六、配置数据库 Rails 支持多种数据库,可以根据需求进行配置: - 默认情况下...

    rails 的安装

    安装完成后,你可以通过运行 `rails -v` 来检查Rails是否已正确安装,并查看其版本号。 5. **创建新的Rails项目**: 要创建一个新的Rails应用,运行 `rails new app_name`,这将生成一个包含默认目录结构的新项目...

    ruby gem环境

    此外,Gemfile和Gemfile.lock文件在Ruby on Rails项目中尤其常见,它们用于声明项目依赖并锁定具体版本,通过`bundle install`命令管理。Bundler是一个额外的工具,它使得在多Gem项目中的依赖管理更为简单和可靠。 ...

    Mac上rails环境的搭建

    为了确保项目能够正确使用MySQL数据库驱动,我们需要在`Gemfile`中指定MySQL2 gem版本。 ```ruby source 'https://ruby.taobao.org' gem 'mysql2', '~>0.3.18' ``` ##### 3. 修改database.yml配置文件 接下来,...

    Rails bundle命令安装mysql gem包出错的解决方法

    解决 Rails bundle 安装不上 mysql gem包的问题 环境 ubuntu 12.04 ruby-2.1.1 首先 新建一个的一个项目,在该项目上执行 bundle install 提示 代码如下: … Make sure that gem install mysql2 -v ‘0.3.16’; ...

    ruby on rails安装

    此外,你还需要安装其他可能的依赖库,比如开发工具集`bundle install`,这将根据`Gemfile`中的定义安装所有必需的gem。 至此,你已经成功安装了Ruby on Rails,并具备了基本的开发环境。继续学习Rails的MVC结构、...

    ruby_on_rails 源代码上

    通过`Gemfile`,开发者可以指定应用所需的Gem版本,然后使用`bundle install`命令安装和管理这些Gem。 8. **数据库迁移** Rails的`db/migrate`目录存储数据库迁移文件,这些文件定义了数据库结构的变化。使用`...

    基于ruby on rails开发示例源码

    2. **Gemfile.lock**:记录项目的精确gem版本,确保在不同环境中部署时保持一致性。 3. **config/**:配置文件夹,包含数据库配置、路由设置(routes.rb)、应用配置等。 4. **db/**:数据库相关文件,如数据库...

    tc359_rails_final

    10. **Rakefile** 和 **Gemfile.lock**:Rakefile用于执行自定义任务,而Gemfile.lock记录了具体的gem版本,确保在不同环境中使用一致的依赖。 11. **Procfile**:对于Heroku部署,这个文件定义了应用启动时需要...

    ruby多版本安装包rar

    `Gemfile`是Ruby项目中的一个文件,列出了项目依赖的所有Gem及其版本,使用`bundle`命令可以安装和更新这些Gem,确保所有开发者在同一环境中使用相同版本的库。 7. **持续集成与部署**: 在团队协作中,使用多版本...

    rubygems-3.0.2

    2. **管理Gem版本**:RubyGems允许指定Gem的版本,确保项目依赖的一致性。例如,`gem 'nokogiri', '~> 1.10.8'`会安装1.10.8或更高但不超过1.11.0的nokogiri版本。 3. **创建Gem**:开发者可以将自己的代码封装成...

    在Ruby(和Rails)中部署机器学习模型-Ruby开发

    将这一行添加到应用程序的Gemfile中:gem'trove'并运行:bundle install tr​​ove init并在.trove.yml中配置存储。 存储Amazon S3创建存储桶并启用对象版本控制。 接下来,设置您的AWS凭证。 您可以使用AWS CLI:...

    资源for rails

    3. **Gemfile和Bundler**:Rails项目中的`Gemfile`用于指定项目依赖的Gem(Ruby的库)。Bundler工具用于管理这些Gem,通过`bundle install`命令安装和更新Gem。 4. **路由**:Rails的路由系统将URL映射到控制器的...

    active_link_to:Rails视图助手来管理链接的“活动”状态

    在为Rails 3/4/5应用程序安装时,将其添加到Gemfile: gem 'active_link_to'并运行bundle install 。 对于较旧的Rails应用,请在config / environment.rb中添加config.gem 'active_link_to'并运行rake gems:install...

    redmine1.1.1-rubyp334离线安装gem

    在IT行业中,Redmine是一个非常受欢迎的开源项目管理工具,它基于Ruby on Rails框架构建,提供了丰富的功能,如问题跟踪、项目文档管理、时间跟踪等。对于那些无法连接到互联网或者网络环境受限的用户,离线安装...

Global site tag (gtag.js) - Google Analytics