我是rails的新手 - 指定精确(当前)宝石版本的优缺点是什么?
以下是我的引擎中的宝石:
s.add_dependency "haml-rails"
s.add_dependency "strip_attributes"
s.add_dependency "devise"
s.add_dependency "daemons"
s.add_dependency "delayed_job_active_record"
s.add_dependency "gravatar_image_tag"
添加版本是否确保未来版本的gem不会破坏应用程序?
但这不意味着您不会修复任何错误吗?
答案 0 :(得分:2)
遵循semantic versioning被认为是最佳做法。 总结一下,次要版本只包含错误修复,不要更改API,所以如果你想要充分利用这两个世界,请使用
gem 'library', '~> 2.2'
通过这种方式,您将获得最高2.2版本(例如2.2.3),其中包含所有错误修复和无重大更改。
答案 1 :(得分:0)
您的Gemfile.lock
会记录版本,并为您锁定。
使用它 - 与bundler一起使用。我目前必须维护一个Rails 2.3应用程序,而且我经常必须避免认为他们被邀请进入的宝石的最新版本。
答案 2 :(得分:0)
指定宝石版本的优点:
Gemfile.lock
仅会更改为新gem。如果您的版本未明确显示,则它们可能会意外更改多个gem安装。您可能正在使用某些功能,并且偶然包含了您没有注意到的gem更新。的确,您应该在代码审查中抓住了这一点,但您可能没有。如果未明确显示gem版本,这种情况尤其常见,尤其对于初级用户。可以指定宝石的版本:
Gemfile.lock
,则您将始终拥有最新的宝石,这可能会带来很多好处,包括从宝石中增加功能作为提高的安全性。Gemfile.lock
文件应该承担管理宝石版本的大量责任。从这个角度来看,开发人员应该“让工具完成工作”,而不是自己亲自管理gem版本。两全其美的做法可能是明确指定版本,然后在可能的情况下使用一种工具来自动更新依赖项,以便gem更新最终成为单独的提交。这样,如果它们导致错误或破坏测试,则更容易找出原因。像gemnasium
和dependabot
这样的工具。如果您还引入了javascript库,那么在此应用JavaScript库也是一个好习惯。
针对您的特定问题: