我是 Ruby on Rails 的新手,并且一直看到人们使用Rails Brick或Rails Composer等自动样板生成器来创建样板用户管理系统等。来自不信任自动生成代码的背景,这很好吗/在 Rails 中使用此类系统的合法做法。另外,我正在与一家初创公司合作开展一个项目。使用这样的生成器是否可以,这种习惯有多普遍。
PS Mods 请注意,这不是一个询问比较/意见/争议的问题。我很好奇 Rails 中的一般做法以及它在生产中使用的频率。
我是 Ruby on Rails 的新手,并且一直看到人们使用Rails Brick或Rails Composer等自动样板生成器来创建样板用户管理系统等。来自不信任自动生成代码的背景,这很好吗/在 Rails 中使用此类系统的合法做法。另外,我正在与一家初创公司合作开展一个项目。使用这样的生成器是否可以,这种习惯有多普遍。
PS Mods 请注意,这不是一个询问比较/意见/争议的问题。我很好奇 Rails 中的一般做法以及它在生产中使用的频率。
我是Rails Composer的维护者,所以我相信我可以权威地回答这个问题。
我尊重(并分享)从头开始构建的冲动。这是一种健康的冲动。Rails 包含一个应用程序模板工具(Rails Composer 是一个应用程序模板),因为自动化可以节省时间和精力。对于构建许多 Web 应用程序的人来说,您决定将流程自动化的时候到了。
Rails Composer 提供了优于滚动您自己的应用程序模板的优势,因为它是开源的,被成千上万的开发人员使用,并有许多人贡献了代码。随着 Rails 和 gems 的变化,Rails Composer 也会更新,因此您每次都可以获得当前的“参考实现”。它为您提供了经过良好测试的入门应用程序,这些应用程序集成了所有需要调整的点点滴滴,例如 RSpec plus Capybara 和 FactoryGirl、Flash 消息和导航与 Bootstrap 或 Foundation 前端框架、用于身份验证的 Devise 或 OmniAuth、用于授权的 Pundit,以及许多开发人员喜欢添加的实用工具(Guard、Pry 等)。它允许您选择您的堆栈(例如 ERB、Haml 或 Slim),在社区贡献选项的范围内提供选择。
如果您担心运行安装脚本的安全性,该代码是开源的,并被成千上万的 Rails 开发人员使用(您可以在 GitHub 存储库上看到超过 2000 名观察者)。它纯粹是一个使用 Thor 库的应用程序模板,虽然理论上有人可以提供篡改文件的代码,但我们绝不会接受这样的拉取请求。Rails Composer 仅提供知名的流行 gem,因此您不会面临使用未知 gem 的潜在风险。
Rails Composer 被广泛使用,尤其是构建大量应用程序的顾问。许多著名的咨询公司都有一个内部应用程序模板(例如,Thoughbot Suspender),有些使用 Rails Composer 或生成自定义应用程序模板的rails_apps_composer gem。定期只开发一个应用程序(例如维护一个大项目)的开发人员往往不太熟悉 Rails Composer 等应用程序模板,但它在启动大量应用程序的开发人员中很受欢迎。
Stack Overflow 不适合发表意见,因此如果您想就 Rails 应用程序模板的优点发表一系列意见或辩论,Reddit或Quora可能是更好的提问场所。
欢迎来到堆栈溢出!希望您的所有问题都能得到准确及时的答复。
我是Prelang的开发者,它类似于你提到的生成器。它的不同之处在于为某些功能添加了数据建模、GitHub 集成和更深入的配置。像丹尼尔一样,我相信我对此也有一定的权威,并同意他非常完整的回答。
为了回答您的问题,Prelang 是较新的,但它已经被从初学者到开发商店的数千名开发人员使用。
我想指出 Prelang(和其他构建器)与您在听到“代码生成”时的传统想法不同。在使用 Prelang 时,我的目标是自动化“Rails 开发人员无论如何都会做的一切”。Prelang 确实会生成方法/代码,但主要是自动执行 Gems 的安装过程、设置配置值、创建模型和运行rails
命令。也就是说,Prelang 对它使用的 gem 有意见,但我为每个功能选择了最受欢迎的 gem,一旦我获得更多牵引力,我将提供在多条路线之间进行选择的灵活性。
Prelang 还进行真正的 Git 提交,因此您可以在项目生成后查看每个提交,从而全面了解您的代码库。这是为了进一步缓解与生成代码相关的问题。
埃里克
现在大多数 gem 很容易设置,我认为你不需要这样的生成器。毕竟这只是一个品味问题——我喜欢使用命令行,而且我喜欢确切地知道我的代码库中有什么。根据我的个人经验,我从未见过有人在专业的 Rails 开发中使用过这样的东西,但显然有人在使用它们。
我能想到这些生成器有意义的一种情况是当您非常频繁地引导项目时。然而,在这种情况下,我发现现有的生成器不够灵活。例如,Thoughtbot 已经构建了自己的应用程序生成器,称为Suspenders,其中当然包括一组非常自以为是的宝石等,但它确实为他们提供了他们需要的东西。
作为关于您的安全问题的旁注:对我来说,当您使用许多 gem 时生成的依赖关系树是一个更严重的安全威胁。例如,在一个中型 Rails 项目中,依赖 100 多个 Gem 并不少见;没有人可以阅读所有这些。你也必须相信所有这些。