开始使用 IntelliJ IDEA 中的 Rails 项目
最后修改时间:2023 年 9 月 5 日所需插件:Ruby
IntelliJ IDEA 是一个集成开发环境 (IDE),可帮助您在 Ruby/Rails 项目开发的各个方面提高工作效率 - 从编写和调试代码到测试和部署已完成的应用程序。IntelliJ IDEA 适用于不同平台,包括 macOS、Windows 和 Linux。
在本教程中,我们将使用为Ruby on Rails 教程创建的示例应用程序的分支向您展示主要的 IntelliJ IDEA 功能。在开始本教程之前,请执行以下操作:
我们将使用 macOS 上安装的 IntelliJ IDEA 执行所有步骤。
克隆项目
首先,我们需要克隆包含示例应用程序的存储库:
运行 IntelliJ IDEA 并单击欢迎屏幕上的从版本控制获取。
在“从版本控制获取”对话框中,执行以下操作:
确保在版本控制字段中选择Git。
在URL字段中插入以下地址:
https://github.com/JetBrains/sample_rails_app_7th_ed.git _ _
单击克隆按钮。IntelliJ IDEA 将显示一个进度条,指示克隆过程。
克隆存储库后,IntelliJ IDEA 打开项目并启动索引过程。您可以在状态栏中看到进度。
IntelliJ IDEA 为您的项目建立索引以分析其来源并收集有关可用文件、类和方法定义等的信息。这是代码完成和导航等代码洞察功能所必需的。
提示
当您第一次打开项目、安装依赖项、向项目添加新文件、从版本控制系统获取更新或切换分支时,会发生索引。
选择Ruby解释器并安装gems
打开项目后,需要选择所需的Ruby 解释器并安装项目Gemfile中指定的依赖项:
转到文件| 项目结构,或按。CtrlAltShift0S
在调用的“项目结构”对话框中,切换到“模块”页面并选择“Ruby 解释器”。
笔记
在本教程中,我们使用 RVM 来管理 Ruby 解释器。您还可以使用由其他版本管理器管理的解释器或使用操作系统的包管理系统安装的解释器。
单击“确定”。
现在,让我们安装Gemfile中指定的 gem 。IntelliJ IDEA 允许您使用Bundler来管理 gem。按两次并开始输入bundle install。然后,从列表中选择命令并按。Ctrl
bundle install
Enter(可选)如果当前项目解释器没有Gemfile.lock中指定的所需 Bundler 版本,IntelliJ IDEA 建议安装它。
在“捆绑包安装”对话框中,添加以下参数:
--without production
然后,单击运行。
等待 IntelliJ IDEA 安装所有 gem。
运行迁移
在运行Rails 应用程序之前,我们需要迁移数据库。
按两次并键入。在下拉列表中选择rake db:migrate并按。Ctrl
db:migrate
Enter在调用的执行“db:migrate”对话框中保留默认设置,然后单击“确定”。
这将在db文件夹中创建development.sqlite3数据库。
rake db:migrate
按照第一步中的说明再运行一次。这次,在“执行‘db:migrate’”对话框中将“环境”选项设置为“测试”,然后单击“确定”。创建的test.sqlite3数据库将用于运行测试。
浏览项目
IntelliJ IDEA 提供丰富的导航功能来探索任何规模的项目。您可以在文件之间导航、转到声明、搜索任何类型的实体等等。
项目视图
IDE 左侧的项目视图 ( ) 显示项目结构。您可以使用它打开项目中的任何文件、创建新文件等。Alt01

前往声明
转到声明允许您从任何符号用法导航到符号的声明。要查看此功能的实际效果,请按,开始键入,选择users_controller.rb文件并单击。CtrlShift0Nusers_controller
Enter

在打开的users_controller.rb文件中,将插入符号放在类旁边User
,然后按。Ctrl0B
您将跳转到user.rb文件中的类声明。
请注意,您不仅可以跳转到项目实体,还可以跳转到外部库中的定义(在我们的例子中是 gem)。例如,按住鼠标,将鼠标悬停在该方法上。当该方法变成超链接时,单击它而不释放按键。Ctrlhas_many
IntelliJ IDEA 将打开ActiveRecord Rails 模块中的方法定义。
查找用法
让我们尝试一下“查找用法”操作。在users_controller.rb文件中,向下滚动到该edit
方法,将插入符号放在其旁边,然后按。在“查找”窗口中,您可以探索使用此操作的位置。AltF7

在 Rails 实体之间导航
在处理特定的 Rails 实体(例如控制器)时,您可以导航到相关的视图、模型、测试或帮助程序。将插入符号放在方法旁边edit
,按,选择查看,然后按。IntelliJ IDEA 将打开包含相应视图的edit.html.erb文件。CtrlAltHomeEnter
您可以在视图中使用相同的快捷方式,或使用编辑器装订线中的图标快速转到相应的操作。
到处搜索
IntelliJ IDEA 的下一个功能允许您搜索文件、类、符号或选项并跳转到您需要的实体。
让我们尝试找出destroy
中的动作UsersController
。按两次并开始输入destroy。IntelliJ IDEA 列出了找到您的查询的所有找到的结果。从UsersController中选择销毁操作并按。ShiftEnter

users_controller.rb文件将被打开,插入符号将放置在操作的定义上destroy
。
编辑代码
IntelliJ IDEA 在编辑器中提供了多种代码编辑功能,可让您加快开发过程。其中包括代码完成、重构、代码检查等。
代码完成
IntelliJ IDEA 可以帮助您完成类、方法、关键字等的名称。当您调用代码完成时,IntelliJ IDEA 会分析上下文并建议适用于当前插入符位置的选择。
例如,打开users_controller.rb文件并转到index
该类中声明的方法UsersController
。在方法中键入以下代码,然后键入点。
@user = User
因为User
类是从ApplicationRecord
模块继承的,所以编辑器将显示所有继承的成员。
之后,开始键入first
内容以过滤列表并从Querying
模块中找到相应的成员,然后按。Enter
笔记
您还可以通过按 手动调用代码完成。CtrlSpace
意图
意图可帮助您快速应用各种代码更改:转换语句以获得更好的代码样式、将字符串添加到区域设置字典、使用语言注入等。
要查看实际意图,请打开user.rb文件并向下滚动到该User.digest
方法,该方法使用多行三元运算符?:
。根据Ruby Style Guide,最好用if/then/else/end
块替换此类运算符。为此,请将脱字符号放在该三元表达式处(例如,ActiveModel 旁边)并按。按将三元运算符转换为块。AltEnterEnterif/then/else/end
提示
您可以检查代码并使用检查来检测可能的问题。
重构代码
重构是修改源代码以使其更易于维护和扩展但不改变其行为的过程。让我们看看 IntelliJ IDEA 中提供的一些重构功能。
重命名重构允许您重命名类、方法、文件、变量和参数,并相应更正代码中对它们的所有引用。打开users.rb文件并向下滚动到回调downcase_email
中引发的方法before_save
。将插入符号放在该方法旁边,然后按查看其定义。CtrlShift0I
单击Esc并按。在“重构此”弹出窗口中选择“重命名”,这会建议各种重构。CtrlAltShift0T

在“重命名”对话框中,指定新的方法名称(在本例中为lowercase_email ),然后单击“重构”。

重构预览窗口将显示对重命名方法的所有引用。

单击“Do Refactor”以在所有位置重命名该方法。
重新格式化代码
IntelliJ IDEA 允许您重新格式化源代码以满足您的代码风格的要求。
让我们重新格式化user.rb文件的代码。打开此文件并按。CtrlAlt0L
IntelliJ IDEA 将重新格式化整个文件并显示许多更改的行。
分析代码
在这一部分中,我们将执行静态代码分析并检测问题。
IntelliJ IDEA 支持多种检查类型,此外,还允许在 IDE 内显示RuboCop攻击。IntelliJ IDEA 默认启用 RuboCop 检查,并且需要将RuboCop gem添加到模块 SDK 中。如果未安装此 gem,IntelliJ IDEA 将建议执行此操作。

让我们打开包含应用程序使用的 gem 列表的Gemfile 。将鼠标悬停在active_storage_validations gem显示的警告上。

IntelliJ IDEA 将显示一条 Rubocop 消息,通知您需要按字母顺序订购 gem(请参阅OrderedGems)。
将插入符号放在active_storage_validations gem 旁边,然后按。编辑将建议修复与不正确的宝石排序相关的所有问题。按执行此操作。AltEnterEnter
您还可以检查整个项目并在单个报告中显示所有警告。为此,请选择代码 | 检查主菜单中的代码。在调用的对话框中,您可以指定所需的检查范围。

保留整个项目选项并单击确定。检查结果窗口将显示整个项目的警告。

您可以浏览此报告并修复或抑制特定警告。
运行测试
IntelliJ IDEA 使您能够使用不同的测试框架,例如 Minitest、RSpec 或 Cucumber。
运行所有测试
我们的项目在test文件夹中包含 Minitest 测试。要运行所有测试,请按 打开项目视图。然后,右键单击测试文件夹并从上下文菜单中选择运行“测试中的所有测试” 。Alt01

IntelliJ IDEA 将运行并在运行工具窗口中显示测试结果。
运行特定测试
现在让我们看看如何运行特定的测试。打开users_controller_test.rb文件,向下滚动到should redirect index when not logged in
测试,然后单击该测试旁边左侧装订线中的“运行”按钮。

在调用的菜单中,选择Run 'Minitest: test_should_...'。IntelliJ IDEA 将显示此测试的结果。

重新运行失败的测试
现在让我们回到users_controller_test.rb并打破两个测试。对于should get new
和should redirect index when not logged in
测试,请注释get signup_path
和get users_path
行。为此,请选择这些行并使用快捷方式。Ctrl0/

按照运行所有测试中的说明再次运行所有测试。您现在可以看到这些测试失败了。

让我们通过取消注释和行来修复当前打开的users_controller_test.rb文件中的这些测试。现在,我们可以使用 按钮仅重新运行这些失败的测试。get signup_path
get users_path
Ctrl0/
现在我们已经准备好运行我们的应用程序了。
创建运行/调试配置
要运行和调试我们的 Rails 应用程序,我们需要创建相应的Rails配置。按并开始输入编辑配置。选择编辑配置并按。CtrlShift0AEnter

在调用的“运行/调试配置”对话框中,单击,开始输入Rails并从列表中选择它。

将创建的配置名称更改为Development:sample_rails_app并单击OK。

运行应用程序
要运行我们的 Rails 应用程序,请按两次并开始输入。从列表中选择sample_rails_app_7th_ed配置并按。Ctrlsample_rails_app
Enter

IntelliJ IDEA 将显示准备运行应用程序的过程。

转到Web 服务器使用的0.0.0.0:3000地址来查看我们的工作应用程序。

调试应用程序
IntelliJ IDEA 的主要功能之一是调试支持。调试器提供了多种方法来检查正在运行的应用程序的状态。您可以单步执行代码并检查变量值,对变量设置监视以查看值何时发生变化,等等。
提示
我们的示例应用程序使用puma Web 服务器,其默认工作线程超时等于 60 秒。出于调试目的,将此超时设置为更大的值可能会很有用。为此,请打开config/puma.rb文件并指定worker_timeout选项。
设置断点并开始调试
首先,打开users_controller.rb文件。create
在创建新用户的行旁边的方法内设置断点。

要开始调试,请按两次并开始键入。从列表中选择example_rails_app_7th_ed配置,按住键(对话框标题将更改为Debug),然后按。Ctrlsample_rails_app
ShiftEnter

如果调试所需的debase和ruby-debug-ide gem 尚未安装,IntelliJ IDEA 建议安装它们。

安装 gems 后,调试工具窗口将显示应用程序输出。

在本地计算机上打开浏览器并指定应用程序地址0.0.0.0:3000。

点击立即注册!按钮。在“注册”页面上,输入您的凭据并单击“创建我的帐户”。

当程序到达断点时将停止。
检查变量
您现在可以检查应用程序状态和变量值。

Threads & Variables窗格显示应用程序线程和相应的调用堆栈。在我们的例子中,该方法在线程 1create
中调用。在窗格的右侧部分,您可以检查当前上下文中可用的变量。
提示
使用该
按钮可以显示或隐藏对外部库方法的调用。
让我们将user_params
变量添加到列表中。在窗格的右侧,输入user_params
搜索字段并单击。
然后,单击该变量旁边的图标,然后以相同的方式展开@parameters变量。您将看到注册表单中指定的用户凭据。
一旦断点被击中,我们就可以单步执行代码了。
跨过去
单步执行到当前作用域中的下一行(例如,转到下一行),而不会下降到任何方法调用。
对象User
尚未创建,@user
变量尚未初始化(等于nil
)。

按或单击调试工具窗口工具栏中的。调试器将转到下一行 -语句,并且变量将被初始化。F8if
@user

使用该图标展开并检查@user属性。
步入
步入将导致调试器下降到当前行上的方法调用或块并跟踪它们。如果有多个方法调用或块,您可以选择所需的目标。
单击可恢复程序执行。再次转到浏览器并在注册表单中创建另一个用户。当脚本到达创建用户的行时,该脚本将停止。

按下或单击按钮。编者将重点放在方法上。您可以使用箭头键或选择要进入的所需方法(或在我们的示例中)。选择并按。程序执行会跳转到方法定义处。F7user_params
Tabnew
user_params
user_params
Enteruser_params
如果您再按一次,调试器将建议在StrongParameters模块中的和方法之间进行选择。F7params
require
在控制台中调试
调试器具有“控制台”选项卡,使您能够通过类似 IRB 的控制台与已调试的应用程序进行交互。
开始user_params
在控制台中输入,选择相应的变量并按。Enter
控制台窗口将显示变量的值。
感谢您的反馈意见!