我正在编写一个用于Rails环境的Ruby脚本,但我选择从irb运行它,因为重新加载Rails控制台可能会很麻烦.现在irb的等待时间要短得多,但是我不得不重新启动irb并且每当我做出改变时都需要脚本.有没有更简单的方法从irb重新加载脚本?
我在这个帖子中找到了一个方法,但这只是显然适用于gem文件.我的require语句看起来像这样
require "#{File.expand_path(__FILE__)}/../lib/query"
Run Code Online (Sandbox Code Playgroud)
编辑:尝试load而不是require,我仍然无法让它工作.我无法阻止这些错误.
ruby-1.9.2-p0 > load "#{File.expand_path(__FILE__)}/../lib/query.rb"
LoadError: no such file to load -- /Users/newuser/Dropbox/Sites/rails/hacknyc/(irb)/../lib/query.rb
Run Code Online (Sandbox Code Playgroud) 当我使用Merb的内置控制台时,我得到类似于标准bash提示的选项卡自动完成.我觉得这很有用,并希望在非merb IRB会话中启用它.如何在IRB中自动完成?
我可以从正在运行的Ruby脚本中转到IRB提示符吗?
我想运行一个脚本,但是然后让它在程序中的一个点上给出一个IRB提示符,其中包含程序的当前状态,但不仅仅是运行rdebug并有一个断点.
我想知道是否有一种方法可以在rails控制台中加载和/或使用fixture.实际上,我想从我的夹具中创建一个用户users.yml进行一些测试,而不必经历User.new(:name = "John", :email = "..")每次做的所有"痛苦" .
我目前在测试环境(rails c RAILS_ENV=test).
如果这不是一个好办法,请说出来.我是Rails的新手所以我在这里学习:)
有没有理由说我目前的工作目录不在我的Ruby路径上?
考虑:
~:499$ irb
ruby-1.9.2-p136 :002 > puts $:
/Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1
/Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1/x86_64-darwin10.6.0
/Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby
/Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby/1.9.1
/Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby/1.9.1/x86_64-darwin10.6.0
/Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby
/Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1
/Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/x86_64-darwin10.6.0
=> nil
Run Code Online (Sandbox Code Playgroud)
这真的很困扰我,因为需要不起作用,因为我认为它会(虽然我是一个红宝石的nuby):
require 'some_file_that_I_know_darn_well_is_in_pwd.rb'
Run Code Online (Sandbox Code Playgroud)
如果我追加'.'到最后,则需求按照我的预期运行.
我错过了什么?
更新:
精氨酸!现在我遇到了一个新问题.考虑:
ruby-1.9.2-p136 :010 > `ls`
=> "start.rb\n"
ruby-1.9.2-p136 :011 > require_relative 'start'
LoadError: cannot infer basepath
from (irb):11:in `require_relative'
from (irb):11
from /Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/bin/irb:16:in `<main>'
Run Code Online (Sandbox Code Playgroud)
现在怎么了?
我是红宝石的新手,我正在玩IRB.
我发现我可以使用".methods"方法列出对象的方法,而self.methods类似于我想要的东西(类似于Python的dir(builtins)?),但我怎样才能找到方法库/模块我通过include和require加载?
irb(main):036:0* self.methods
=> ["irb_pop_binding", "inspect", "taguri", "irb_chws", "clone", "irb_pushws", "public_methods", "taguri=", "irb_pwws",
"public", "display", "irb_require", "irb_exit", "instance_variable_defined?", "irb_cb", "equal?", "freeze", "irb_context
", "irb_pop_workspace", "irb_cwb", "irb_jobs", "irb_bindings", "methods", "irb_current_working_workspace", "respond_to?"
, "irb_popb", "irb_cws", "fg", "pushws", "conf", "dup", "cwws", "instance_variables", "source", "cb", "kill", "help", "_
_id__", "method", "eql?", "irb_pwb", "id", "bindings", "send", "singleton_methods", "popb", "irb_kill", "chws", "taint",
"irb_push_binding", "instance_variable_get", "frozen?", "irb_source", "pwws", "private", "instance_of?", "__send__", "i
rb_workspaces", "to_a", "irb_quit", "to_yaml_style", "irb_popws", "irb_change_workspace", "jobs", "type", "install_alias
_method", "irb_push_workspace", "require_gem", …Run Code Online (Sandbox Code Playgroud) 在python世界中,有许多替代python解释器可以添加很酷的附加功能.一个特别有用的示例是bpython,它添加了动态语法突出显示,自动提取文档,并显示实时自动完成信息.在Ruby世界中,我还没有发现任何添加到基本IRB解释器的项目,甚至是这些功能的一部分.我只是不够努力,或者这只是Ruby社区缺乏的东西?
我刚刚在Windows机器上安装了ruby 1.9.2,Backspace或任何其他箭头键都不起作用.只有当我在Git Bash控制台上打开IRB时才会发生这种情况.但它在Windows控制台上运行良好.对此有何帮助?
注意:IRB在早期版本的ruby的两个控制台上运行良好.
我认为这是一个简单易行的问题!
我正在使用.env文件来保存我的所有环境变量,而我正在使用foreman.
不幸的是,运行rails控制台时没有加载这些环境变量,rails c所以我现在在运行控制台后手动加载它们,这不是最好的方法.
我想知道是否有更好的方法.
例如,如果我进入IRB并执行以下操作:
jruby-1.6.7 :026 > puts [1,2,3,4,5]
1
2
3
4
5
=> nil
Run Code Online (Sandbox Code Playgroud)
反正有压制nil吗?问题是,如果我放入一个大型数据结构,它会发送一些其他不相关的返回响应.我更感兴趣的是看到调试语句的输出我在一个块中运行,并且必须不断向上滚动并查找真实数据.