我一直发现很多 rails 开发人员通常会将很多任务交给 gem 而不是自己编写代码,有时我发现自己根本不使用它们,因为 gem 的行为在某些小方面并不完全像我想要的那样,这对你们中的任何人来说都很奇怪吗?
顺便说一句,我确实使用执行加密任务的 gem,如 bcrypt 和 mysql2 用于数据库连接,但我从未发现自己使用 Devise/Authlogic 等 gem 进行身份验证。
你可以忘记 Rails,问问自己——"我是否需要标准库,还是需要创建自己的库?
重用现有代码是软件开发中的一种良好做法。
Rails 的理念是使用宝石来不重新发明轮子,最重要的是用更少的钱做更多的事情。
好的宝石应该是可配置的,因为您可以根据需要使用它。
你问这很奇怪吗?
不,不是。我经常有同样的问题需要解决。当您使用 gem 时,您通常需要根据自己的需求对其进行调整。更新此 Gem 时,可能需要再次应用更改,或者当 Gem 开始以您想要的不同方式运行时出现问题。
当你创建自己的解决方案时,你很清楚它(所以,你不需要处理别人的错误,只需要处理你自己的错误),解决方案总是完全符合你的需求,你可以在需要时更改它。
您使用的 gem 示例(bcrypt 和 mysql2)是一些非常通用的任务的好示例,这些任务在应用程序的生命周期中不需要任何修改。您无需更改加密协议,数据库连接也不需要特定于应用程序的更改。
但是身份验证系统可能需要调整,因此最好依靠您自己的独立解决方案。但是,您可能希望复制"他们的"解决方案,而不会使您的项目依赖于"外部"代码。gnulib项目采用了类似的方法。
更新:
请参阅文章 http://www.aidanf.net/rails_user_authentication_tutorial。在那里,您会发现编写自己的身份验证系统的几个原因,解释得比我尝试的要好得多;)
我同意每次您想在 rails 应用程序中添加功能时都不使用插件/宝石的立场。
我觉得当与其他宝石或插件相关联时,某些 gem 或插件可能会表现得很奇怪。我想到了act_as_*,身份验证系统。
例如,要构建自己的标签系统,这很容易,您可以学习act_as_taggable并尝试编写自己的标签系统。我认为花费的时间与学习插件的时间相同。