草庐IT

ruby-on-rails - 什么时候在 Rails 中调用 "require"?

我在Rails或Ruby中有一个更概念性的问题:是否最好在需要它的方法之前调用require,在类的开头或Rails启动时在初始化程序中的某个地方对我的require进行分组?从性能的角度来看,这重要吗?从可读性的角度来看?如果我使用Rails3,会有什么不同吗?谢谢! 最佳答案 如果您关心性能,那么您应该在需要它们的上下文中要求它们,这样如果您的那部分代码没有被执行,库就不会被加载。任何对require的后续调用都没有效果,因为该文件已经加载。这最终看起来像这样:if(user.using_openid?)require'open

ruby-on-rails - 如何要求在 Rails 之外工作的事件记录

我需要要求事件记录,但我在rails之外工作(原因如下:SimpleRubyInputValidationLibrary)。我需要require整个railsgem,还是我可以成为DRYer? 最佳答案 下面是我在Rails之外使用ActiveRecord的方式:#!/usr/bin/rubyrequire'active_record'require'mysql2'#or'pg'or'sqlite3'ActiveRecord::Base.establish_connection(adapter:'mysql2',#or'postgr

ruby - 为什么需要 "require ' bundler/setup'”?

在我见过的几乎所有Sinatra示例中,不管它做了什么,它总是有以下两行:require'rubygems'require'bundler/setup'在大多数示例中,删除“bundler/setup”要求似乎没有破坏效果,所以我对何时何地需要包含它感到困惑。我讨厌在不知道确切原因的情况下使用东西,所以我希望有人能解释为什么我需要这两条线以及它们的作用? 最佳答案 它确保您正在加载Gemfile定义的gem。请在此处查看文档https://bundler.io/v1.12/bundler_setup.html

ruby - 如何在 rspec 测试中包含 lib 目录

我在JRuby1.7.4上测试包含lib目录的gem时遇到问题。我想测试位于lib/vger/resources/account_manager.rb的文件我的规范文件在spec/vger/resources/account_manager_spec.rbrequire'spec_helper'describeVger::Resources::AccountManagerdo..endend我正在尝试将要测试的文件包含在spec_helper.rb中require'rubygems'require'bundler/setup'require'vger/resources/account

Ruby 路径管理

在ruby​​程序中管理require路径的最佳方法是什么?让我举一个基本的例子,考虑这样的结构:\MyProgram\MyProgram\src\myclass.rb\MyProgram\test\mytest.rb如果在我的测试中我使用require'../src/myclass'那么我只能从\MyProgram\test文件夹调用测试,但我想能够从任何路径调用它!我想到的解决方案是在所有源文件中定义以下行:ROOT="#{File.dirname(__FILE__)}/.."unlessdefined?(ROOT)然后总是使用require"#{ROOT}/src/myclass

Ruby:如果更改了文件,则再次需要一个文件

我写了一个在config/中查找配置文件的gem。这工作正常,但如果用户更改任何配置,他们必须停止程序并在我的gem加载新配置之前重新启动它。这将要求他们在每次更改时重新启动整个Rails应用程序,这并不理想。有没有办法“重新要求”一个文件,以便它重新加载它而不是使用缓存的版本。 最佳答案 您可以使用load代替require。这将加载文件,而不管它之前是否已经加载过。请注意,对于load,您需要指定.rb扩展名,它对于require是可选的。所以require"path/to/myconfig"变成了load"path/to/my

ruby - gem 和 require 的区别(require open-uri)

我只是想了解自己。我正在使用nokogirigem(用于解析HTML)。如果我能正确打开URL,我需要使用gem“open-uri”中的方法。但是当我将它包含在我的Gemfile中时(在Windows开发人员的机器上):gem'open-uri'-捆绑安装时出现找不到gem的错误。因此,如果我使用require'open-uri'-它可以正常工作。那么有人能解释一下这是怎么回事吗? 最佳答案 您正在使用bundler对于您的gem依赖项,您做对了,但是OpenUri是Ruby标准库的一部分。这就是为什么如果您想在代码中使用它,您仅需

ruby-on-rails - 如何从另一个目录中获取 ruby​​ 文件

我正在尝试请求一个我在另一个文件中创建的rake文件。这两个文件位于两个不同的目录中。我在第一个文件的顶部有require,在require之后的引号内有第二个文件的名称。它告诉我它无法加载这样的文件。这是否意味着因为它在不同的目录中找不到它?我尝试坚持第二个文件的完整路径,但它仍然无法加载文件。有谁知道如何将第二个文件加载到第一个文件中?提前致谢 最佳答案 require将仅在一组称为“加载路径”的位置中搜索文件。您可以在脚本或irbsession中使用全局变量$LOAD_PATH查看加载路径。如果它不在加载路径中,则不会找到它。

ruby - 如何在 Ruby 中获取 `required` 的文件列表?

这纯粹是一个实验,但我想知道是否有可能通过某种元编程在运行时获取require的gem列表。例如,假设我有:require'rubygems'require'sinatra'require'nokogiri'#don'tknowwhattodohere如何在运行时打印出以下内容?thisappneedsrubygems,sinatra,nokogiri 最佳答案 您不能完全做到这一点,因为需要一个文件可能需要其他文件,而Ruby无法区分您需要的文件和其他人需要的文件。p>您可以查看$LOADED_FEATURES以获取所需的每一项内

ruby - ruby 和 irb 都不能加载当前目录中的 .rb 文件

我在用Ruby导入文件时遇到了一个非常菜鸟的问题。我正在WindowsXP中制作一个Ruby应用程序。该应用程序的所有类文件都在"C:/Documents/Prgm/Surveyor_Ruby/lib"中。但是当我在另一个文件中require一个文件时,ruby和irb都找不到所需的文件。当前目录的内容:C:\Documents\Prgm\Surveyor_Ruby\lib>dirVolumeindriveChasnolabel.VolumeSerialNumberisAAAA-BBBBDirectoryofC:\Documents\Prgm\Surveyor_Ruby\lib10/0