为了发送邮件
这里没有使用gem,因为它已经默认在Rails里面了。
然而,花点时间了解Action Mailer的工作原理是很重要的,因为发送邮件是许多Rails应用程序的重要组成部分。
仅仅是认证就需要电子邮件来正常工作。
旧的资产(CSS、JS...)管道
gem "sprockets-rails"
这是Rails的旧资产管道。它没有被使用,但出于向后兼容的原因被保留下来。
关系型数据库
gem "pg", "~> 1.1"
Postgre是Ruby-on-Rails世界中最常用的、可用于生产的关系型数据库,所以我们在这里保持简单。
网络服务器
gem "puma", "~> 5.0"
Puma是Rails的默认Web服务器。
Windows兼容性
gem "tzinfo-data", platforms: %i[ mingw mswin x64_mingw jruby ]
我们对这个默认的宝石了解不多,但没有它,Rails就不能在Windows平台上工作。
现代前端资产管理
gem 'vite_rails'
ViteJS是一个完整的Ruby-on-Rails前端资产管理。自Rails 5.1以来,前端资产管理非常不稳定,所以我们的想法是使用在业界已经很稳定的东西,而只是保留Sprokets作为向后兼容。
认证
gem "rodauth-rails", "~> 1.0"
Rodauth是Rails的一个优雅的认证工具。是的,我们知道Devise、Clearance、Sorcery等。但Rodauth要好得多,至少有两个原因。
- 非常简约的安装
- 基于Ruby,所以不会侵入Rails层内部
- 如果需要,非常容易扩展
- 创作者提供了很好的支持
本地存根电子邮件
gem 'letter_opener', group: :development
Letter Opener允许开发者在浏览器中自动查看任何已发送的邮件(邮件并没有实际发送)。
后台工作
gem "sidekiq"
后台工作在Rails应用程序中几乎是强制性的,仅仅是认证,你需要电子邮件确认,密码恢复等,这些都是通过电子邮件处理的。
强烈建议使用.deliver_later 方法来发送邮件。在生产中,只有像Sidekiq或DelayedJobs这样的特定作业运行器才能妥善处理。
内存中的键值数据库
gem "redis"
Redis是一个键值数据库。它在Rails应用程序中有许多用途。到目前为止,只有Sidekiq需要它,但在不久的将来,Redis将为其他功能服务。
漂亮的调试
gem "awesome_print"
令人敬畏的打印允许更好地进行调试。在任何地方写入ap @my_variable ,一旦达到,就会在控制台中漂亮地打印出来。
监控Rails DB
gem "rails_db", ">= 2.3.1"
直接在浏览器中调试应用,可以说是非常方便的。
在本地读取环境变量
gem 'dotenv-rails', groups: [:development, :test]
环境变量是不应该在版本库中硬编码的变量,因为它们可能随时都会改变。想想秘密密码或URL。
这个宝石允许开发者在开发和测试模式下使用它们。
# inside .env, at the root of the Rails project
MY_KEY=MY_VALUE
MY_EMAIL=foo@bar.com
你把它们写在一个".env "文件里,然后你可以通过ENV['MY_KEY']访问它们。
读取Markdown
gem 'redcarpet'
Rails无法读取Markdown,除非你使用一个合适的gem。一旦加载了,你可以通过以下方式访问它Redcarpet::Markdown
系统测试
gem 'cypress-rails', groups: [:development, :test]
Rails默认可以进行系统测试,但安装非常繁琐,而且一旦启动就不稳定。
相反,Cypress是业界的一个著名标准。成熟、稳定,而且非常容易使用。
测试时存根外部请求
gem 'webmock', groups: [:test]
我们认为Webmock的强制性有一个原因:避免测试套件到达任何真实的URL。
你可能会被禁止访问真实的网站,而且你可能会轻易地减慢你的测试套件。
一句话就能确保没有真实的URL被访问。
WebMock.disable_net_connect!(allow_localhost: true)
代码摘录应该是很清楚的:)
测试覆盖率
gem 'simplecov', require: false, group: :test
Simplecov将只覆盖Ruby行(没有JavaScript)。Jest + Istanbul保证了JavaScript的覆盖。
授权
gem "action_policy"
例如,客户不允许访问管理仪表板。不允许访问者访问他们的个人资料。action_policy 是著名的pundit gem的高级版本。
允许Gzip
gem 'heroku-deflater', :group => :production
Gzip会压缩JS和CSS文件。在heroku上,这要感谢'heroku-deflater'宝石,然而,如果你不使用Heroku,你可以简单地从Gemfile中删除这个宝石。