Ruby on Rails最佳实践和技巧

Share

这个资源包含了由我们的Toptal网络成员提供的Ruby on Rails最佳实践和Ruby on Rails技巧的集合.

这个资源包含了由我们的Toptal网络成员提供的Ruby on Rails最佳实践和Ruby on Rails技巧的集合. As such, 本页将定期更新,包括更多的信息和新兴的Ruby on Rails技术. 这是一个社区驱动的项目, 所以我们也鼓励你们做出贡献, 我们期待着你们的反馈.

Ruby on Rails框架背后的理念是减少构建web应用程序所需的时间和精力. 缺点是给开发人员增加了负担,并且需要了解框架的知识, 特别是由于框架的约定优先于配置的特性. To ease this problem, our top Ruby on Rails开发人员和工程师 会在这里分享他们最好的技巧和实践吗.

Check out the Toptal resource pages 有关common的更多信息 Ruby on Rails mistakes, a Ruby on Rails hiring guide, Ruby on Rails job description, and Ruby on Rails interview questions.

测试变量和数据创造性命名的利弊?

在编写测试时,偶尔会出现一个与命名问题有关的微妙问题:为测试数据使用创造性的名称是否更好, such as Wayne Enterprises,或者使用枯燥乏味的名字,比如 Company 1?

这当然取决于开发者和项目, 但是,当仔细研究这个问题时,出现了几个有趣的观点.

许多Toptal开发人员发现,当他们使用创造性的命名方案时,测试更容易阅读和理解. 这种关系更为明显. 它还使使用规格更有趣,减少了拖累. 这可以给团队带来许多间接的好处,帮助每个人都参与其中并从中获得乐趣.

However, 当想到有创意的名字时,很容易分心, leading to reduced productivity, 甚至会产生更多令人困惑的规格,试图变得过于“聪明”. To keep distractions in check, 例如,一些Toptal开发者将他们的名字来源限制为一组有限的现有小说作品, Batman, Futurama, and Star Wars.

另一个重要的考虑是,测试数据必须清楚地模拟您试图测试的关系. With creative test names, 测试数据很容易显示出数据中实际上不存在的关系. Are Mario and Luigi siblings or just two users? Additionally, 如果不是很清楚变量名来自流行文化, 它可能会使其他不知道引用的编码员感到困惑. 我们可以期待大多数开发者都认识到这一点 Chewbacca is just dummy data, but Luke 可能是你的同事,然后 Millard Fillmore 你在另一个国家的同事可能不认识这个名字.

这似乎是一个小问题,但保持工作有趣、有趣和轻松是非常重要的. 如果你非常了解你的团队成员,那么创造性的测试数据实际上可以帮助保持事情的进展. 但如果你不太熟悉每个可能看你试卷的人, 让名字更干练、更卫生可能是一种更安全的策略.

Contributors

Carl Dunham

自由Ruby on Rails开发人员
United States

Carl一生都热衷于构建软件、系统和团队. He caught the bug in college, 毕业前的那个夏天,我开始在一家初创公司工作, and hasn't stopped since. 他喜欢学习新的语言和技术, and most of all, 他喜欢用它们来建造大型建筑, interesting things.

Show More

Dave Aronson

自由Ruby on Rails开发人员
United States

Dave从1980年开始用多种语言开发软件, fields, techniques, and domains. 他现在主要使用Ruby(使用和脱离Rails),但也精通Python、C、Elixir等等. 他是在会议、用户组和播客上就软件开发主题发表演讲的老手. 凭借他积累的知识,Dave可以指导你的开发者,并就流程和工具提出建议.

Show More

Branislav Hašto

自由Ruby on Rails开发人员
Czech Republic

15年来,编程一直是Branislav的激情所在, 到目前为止,他已经从事专业编程工作4年多了. 他主要使用Java平台,为金融行业的公司开发软件. 他认为开放和诚实的沟通是构建成功软件的关键. 他喜欢写代码来帮助人们解决问题.

Show More

从Toptal获取最新的开发人员更新.

订阅意味着同意我们的 privacy policy

如何在Mac OS X Yosemite上安装Capybara-Webkit

Toptal的一位开发人员最近遇到了一个问题,当时他需要安装一个 capybare-webkit on a Mac OS X.

Mac OS X Mavericks发布时也出现了问题. 当时的解决方案是替换内置编译器 clang to gcc/g++. This was simple - with brew you would just install gcc把下面几行写进你的 .dotfiles:

# Because of Maverick...
#export CC=/usr/local/bin/gcc-4.2
#出口CXX = / usr /地方/ bin / g + + 4.2

这两个编译器在过去一年中为我们的开发人员提供了很好的服务. 直到新的Mac OS X发布,Yosemite发布. 更新后,编译器开始抛出以下错误:

g++ -pipe -O2 -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5 -Wall -W -DQT_NO_DEBUG
Dqt_webkit_lib -dqt_gui_lib -dqt_network_lib -dqt_core_lib -dqt_shared . lib 
I/usr/local/Cellar/qt/4.8.7/mkspecs/macx-g++ -I.
I/usr/local/Cellar/qt/4.8.7/lib/QtCore.framework/Versions/4/Headers 
I/usr/local/Cellar/qt/4.8.7/lib/QtCore.framework/Versions/4/Headers 
I/usr/local/Cellar/qt/4.8.7/lib/QtNetwork.framework/Versions/4/Headers 
I/usr/local/Cellar/qt/4.8.7/lib/QtNetwork.framework/Versions/4/Headers 
I/usr/local/Cellar/qt/4.8.7/lib/QtGui.framework/Versions/4/Headers 
I/usr/local/Cellar/qt/4.8.7/lib/QtGui.framework/Versions/4/Headers 
I/usr/local/Cellar/qt/4.8.7/lib/QtWebKit.framework/Versions/4/Headers 
I/usr/local/Cellar/qt/4.8.7/lib/QtWebKit.framework/Versions/4/Headers 
I/usr/local/Cellar/qt/4.8.7 . /include -Ibuild -F/usr/local/Cellar/qt/.8.7/lib -x c++-header
c stable.h -o build/webkit_server.gch/c++ gcc -pipe -O2 -arch x86_64 -Xarch_x86_64 
mmacosx-version-min=10.dqt_no_debug -DQT_WEBKIT_LIB -DQT_GUI_LIB 
DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/Cellar/qt/.8.7/mkspecs/macx-g++ -I. 
I/usr/local/Cellar/qt/4.8.7/lib/QtCore.framework/Versions/4/Headers 
I/usr/local/Cellar/qt/4.8.7/lib/QtCore.framework/Versions/4/Headers 
I/usr/local/Cellar/qt/4.8.7/lib/QtNetwork.framework/Versions/4/Headers 
I/usr/local/Cellar/qt/4.8.7/lib/QtNetwork.framework/Versions/4/Headers 
I/usr/local/Cellar/qt/4.8.7/lib/QtGui.framework/Versions/4/Headers 
I/usr/local/Cellar/qt/4.8.7/lib/QtGui.framework/Versions/4/Headers 
I/usr/local/Cellar/qt/4.8.7/lib/QtWebKit.framework/Versions/4/Headers 
I/usr/local/Cellar/qt/4.8.7/lib/QtWebKit.framework/Versions/4/Headers 
I/usr/local/Cellar/qt/4.8.7 . /include -Ibuild -F/usr/local/Cellar/qt/.8.7/lib -x objective
c++-header -c stable.h -o build/webkit_server.gch/objective-c++ In文件包含于
/系统/图书馆/框架/ CoreServices.framework/Headers/CoreServices.h:55, from
/系统/图书馆/框架/基础.framework/Headers/NSURLError.h:12, from
/系统/图书馆/框架/基础.framework/Headers/Foundation.h:80, from
/系统/图书馆/框架/可可.framework/Headers/Cocoa.h:12, from
/usr/local/Cellar/qt/4.8.7/include/QtGui/qmacdefines_mac.h:113, from
/usr/local/Cellar/qt/4.8.7/include/QtGui/qwindowdefs.h:99, from
/usr/local/Cellar/qt/4.8.7/lib/QtGui.框架/版本/ 4 /头/ qapplication.h:46, from
/usr/local/Cellar/qt/4.8.7/lib/QtGui.框架/版本/ 4 /头/ QApplication: 1,
stable.h:1:
/系统/图书馆/框架/ CoreServices.framework/Frameworks/FSEvents.framework/Headers/FSEvents.H:262:错误:' __attribute__ '之前期望'}'
/系统/图书馆/框架/ CoreServices.framework/Frameworks/FSEvents.framework/Headers/FSEvents.H:262:错误:' = '令牌前预期的非限定id
/系统/图书馆/框架/ CoreServices.framework/Frameworks/FSEvents.framework/Headers/FSEvents.H:414:错误:' __attribute__ '之前期望'}'
/系统/图书馆/框架/ CoreServices.framework/Frameworks/FSEvents.framework/Headers/FSEvents.H:414:错误:' = '令牌前预期的非限定id
/系统/图书馆/框架/ CoreServices.framework/Frameworks/FSEvents.framework/Headers/FSEvents.H:493:错误:在'}'令牌make[1]之前期望声明:
*** [build/webkit_server.[sub-src-webkit_server-pro-make_default-ordered]错误2命令“make”失败

不幸的是,他无法取代 capybara-webkit with poltergeist所以他别无选择,只能想办法安装 capybara-webkit 关于他的新操作系统更新.

Both capybara-webkit and poltergeist 为Ruby on Rails社区提供非常有用的工具,用于对JavaScript密集型web应用程序进行端到端测试. 它们都在Ruby on Rails生态系统中扮演着重要的角色.

Anyway, after some googling 花很多时间在 Stack overflow, a fellow Toptal Ruby on Rails developers finally helped him.

问题是他在吸毒 gcc compiler instead of cland compiler, because gcc 编译器不能识别Objective-C扩展头文件. 最后的解决方案还是很简单,他只需要改变 gcc/g++ to clang in his .dotfiles:

export CC=clang
export CXX=clang++

After that change, capybara-webkit finally compiled successfully. 他学到的教训是,一个糟糕的解决方案会给这个领域带来另一个问题. 我们希望你也能从他的经验中学到一些新的东西.

Contributors

Botond Orban

自由Ruby on Rails开发人员
Romania

Botond是一名高技能的专业软件开发人员,他喜欢编写其他人可以理解和遵循的代码. 他对编程的热情始于13岁, 从他父亲那里得到一台ZX光谱兼容的俄罗斯PC后. 他学会了编程,成为了一个真正的终身爱好者.

Show More

如何解决卡住' localhost '?

你有没有遇到过这样的情况 http://localhost:3000/ 只是不会向您的开发Rails服务器发送请求? I certainly have.

在你开始拔头发之前,这里有几个步骤可以尝试一下.

首先,检查你的Rails服务器是否正在运行:

ps ax | grep rails

Is Rails server running?

接下来,检查与开发服务器相同的端口上是否没有其他侦听对象:

sudo lsof -iTCP -sTCP:LISTEN -n -P

在与我们的开发服务器相同的端口上侦听的是什么?

默认情况下,本地Ruby on Rails服务器侦听端口 3000. 如果这个端口在您的机器上被占用, 或者您希望同时运行多个Rails服务器, pass -p 选项和可用的端口号:

rails s -p 8080

考虑1024以下的端口是为系统保留的,需要root访问. 因此,对于web服务器而言,最常用的端口在1024到10000之间. 端口8080是一个很好的(经常使用的)选择,因为它类似于端口80, 最常用于HTTP请求.

如果您正在运行一个映射到域名的Rails服务器,那么您需要确保 /etc/hosts file is setup correctly. First of all, 如果您以前编辑过此文件, 确保没有弄乱任何默认值. Below is the default /etc/hosts OS X,其中包括IPv4和IPv6协议的本地主机映射.

##
##
# Host Database
#
# localhost用于配置loopback接口
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
fe80::1%lo0 localhost

在文件的末尾,添加您的开发域映射.

不同的web服务器,如Thin, Webrick或Puma以稍微不同的方式绑定到本地主机, 所以同时指定IPv4和IPv6映射是有意义的.

127.0.0.1 railsapp.dev
::1 railsapp.dev

Contributors

Kirill Gorin

自由Ruby on Rails开发人员
Portugal

Kirill在过去的4年里一直在开发Ruby on Rails应用程序. 他也有一些开发Django和 .NET platforms. 他有丰富的基于Ruby开发文件和媒体管理系统的经验. 他喜欢在中等规模的团队中工作,拥有产品的所有权,并推动其发展.

Show More

如何快速排除FactoryGirl工厂故障?

假设您正在使用FactoryGirl,并且遇到了一些问题. 你迷路了,想知道解决问题的最快方法是什么. Where to even start? Luckily for you, Toptal’s best Ruby on Rails 开发人员在这里帮助您提供提示和解决方案的路径. Let’s start then.

首先,您需要在Rails控制台中尝试FactoryGirl. 在测试环境中运行Rails控制台 --sandbox option:

$ RAILS_ENV=测试轨道c——沙箱

如果您使用的是Rails 4及以上版本,请使用以下命令:

$ rails c -e test --sandbox 
在沙箱中加载测试环境(Rails 4).2.1)
您所做的任何修改都将在退出时回滚

正如您从上面的欢迎信息中看到的, --sandbox 选项将在关闭控制台后回滚所有数据库更改. 你们不打算把所有的测试数据留在你们工厂创建的数据库中,是吗?

After that, you need to require factory_girl_rails,如果不是自动要求的,在你的测试中 environment:

require 'factory_girl_rails'
# => true

现在你可以通过FactoryGirl创建你的模型:

user = FactoryGirl.create(:user)
# lots of sql here
=> #

If everything went smoothly, 您应该在SQL日志中看到所有模型都已正确保存, 你会从FactoryGirl中获得新的用户. In case there is a problem, 您可能会得到一条错误消息, 或者您将能够从SQL日志中了解更多关于问题的信息以及出错的地方.

Contributors

Alexey Shein

自由Ruby on Rails开发人员
Germany

Alexey是一位才华横溢的软件工程师,拥有超过8年的web开发经验,包括Ruby on Rails, PHP, and JavaScript. 他喜欢解决技术难题和学习新技术. 他是一个很好的导师,喜欢帮助队友.

Show More

作为前端开发人员如何设置后端开发环境?

假设你是一个前端开发人员,你加入了一个在后端使用Ruby on Rails的项目. 唯一的问题是你使用的是Windows操作系统, 建立Rails项目会让你抓狂. 每走一步,似乎都很奇怪 PATH 问题和其他令人困惑的不兼容性, 你甚至在开始编码之前就已经花了好几天的时间.

这种情况有无数的变化, 这归结为在不适合您的项目堆栈的机器上工作. 但你还能做些什么来避免永久秃顶呢?

Toptal开发人员建议使用虚拟化软件,如 Vagrant. Vagrant不仅仅是一个虚拟机. 它是一种管理工具,允许快速轻松地设置和运行整个开发环境. 流浪者允许你选择 VirtualBox, VMWare, and many other virtualizers. It lets you to select your OS, environment variables, tools that will be installed, 甚至为您最喜欢的IDE或浏览器提供了一个完全透明的窗口, 所以你可以测试你的代码,就像它在本地主机上运行一样. 整个过程可以通过一个配置文件和终端中的一个命令来设置和运行.

所以下次你发现自己面对一个项目,你没有合适的机器, 保存你的发型,创建一个完全适合你需要的虚拟环境.

如何在Rails环境中运行Rubymine Scratch文件?

假设您想在Rails环境中运行草稿文件,但似乎找不到实现它的方法. Luckily for you, Toptal Ruby开发人员创建了一个如何在Rails环境中运行Rubymine scratch文件的分步指南:

1) Create a scratch file (Double Shift to run Search Everywhere, then write New Scratch, and press Enter), or ⌘⌃N if you use Mac

2)例如,在其中放入一些代码来测试Rails环境是否真的被加载

puts User.count

3)然后创建“外部工具”(这是RubyMine的自定义shell命令的术语,可以将任何文件作为参数)来运行任何当前打开的文件(它不一定需要是一个草稿文件), it can be any file) by hotkey.

为此,你需要创建一些“rails”——可以从RubyMine运行的可执行包装器. Rails 4.2 comes with spring 可以生成“rails”的Gem -可执行包装器(binstub in Spring terminology) for you. Just run

spring binstub rails

or

spring binstub --all

Spring将生成所有必需的 binstubs and place them in bin directory of your project. Generated binstub will be spring-ified, 这意味着所有连续的脚本运行将更快,并且不需要每次从头开始加载Rails. This is exactly what you need. 不要忘记提交生成的 binstubs into repository.

4)创建“外部工具”运行你的scratch文件与Rails Runner. For this, open Preferences -> Tools -> External Tools -> Click on Plus 图标,并创建自己的Rails运行器外部工具,如图所示: If you use RVM, then you need to wrap your binstub with rvm 所以它会知道使用什么Ruby,见下面的截图:

5)现在创建一个新的热键,这样你就可以运行你的文件,只需按一下按钮(好吧, actually, two buttons). Open Preferences -> Keymap -> and find your external tool (you can filter it by its name) or just going directly to External Tools -> External Tools. 为它分配一些热键(用鼠标右键单击项目并选择) Add Keyboard Shortcut), usually ⌥ + some-letter 绑定是自由的(如在speech中),例如,我使用 ⌥S. 你应该得到类似这样的结果:

6) That’s it. 现在打开您的草稿文件并运行 ⌥S. 如果你做的一切都是正确的, 您的草稿文件将在Rails项目的环境中运行.

Contributors

Alexey Shein

自由Ruby on Rails开发人员
Germany

Alexey是一位才华横溢的软件工程师,拥有超过8年的web开发经验,包括Ruby on Rails, PHP, and JavaScript. 他喜欢解决技术难题和学习新技术. 他是一个很好的导师,喜欢帮助队友.

Show More

Submit a tip

提交的问题和答案将被审查和编辑, 并可能会或可能不会选择张贴, 由Toptal全权决定, LLC.

* All fields are required

Toptal Connects the Top 3% 世界各地的自由职业人才.

Join the Toptal community.