Ruby on rails rails:自定义重新加载!检查语法
我想定制rails控制台Ruby on rails rails:自定义重新加载!检查语法,ruby-on-rails,ruby,rails-console,Ruby On Rails,Ruby,Rails Console,我想定制rails控制台reload命令,以便在重新加载后还将检查语法,例如使用ruby-c 在Caillou的回答之后,我尝试将以下内容添加到#reload位于railties-4.2.2/lib/rails/console/app.rb # you may want to include other dirs too files = Dir[Rails.root + 'lib/**/*.rb'] files.each {|f| `ruby -c #{f}`} 但是我在检查使用github的
reload代码>命令,以便在重新加载后还将检查语法,例如使用ruby-c
在Caillou
的回答之后,我尝试将以下内容添加到#reload代码>位于railties-4.2.2/lib/rails/console/app.rb
# you may want to include other dirs too
files = Dir[Rails.root + 'lib/**/*.rb']
files.each {|f| `ruby -c #{f}`}
但是我在检查使用github的gems的文件时出错,例如
bundler-1.10.6/lib/bundler/source/git.rb:191:in'rescue in load_spec_files':git://github.com/josevalim/inherited_resources.git (在master)尚未签出。首先运行“bundle install”。(Bundler::GitError)
但是,在shell的同一个文件上运行ruby-c
会打印语法OK
,您可以找到承载重新加载的类代码>方法如下:
method(:reload!)
=> #<Method: Object(Rails::ConsoleMethods)#reload!>
当我使用reload时,它不会打印我的“test”字符串代码>。我不知道出了什么问题,但我几乎可以肯定这就是你需要做的。我在重新加载中添加了以下内容代码>见railties-4.2.2/lib/rails/console/app.rb
说明:
Thx,我设法打印“test”,但即使我引入语法错误,它也会打印。我试图修改重新加载代码>。请参阅更新的问题。是否已尝试运行“捆绑安装”,错误消息会告诉您?是的,但没有效果。正如我所说,它在shell中运行良好。为什么需要检查语法?如果它是无效的,你的代码无论如何都会出错。如果你以后访问它,它只会在很长一段时间后出错。这正是为什么有一套健壮的模型、控制器和集成测试是必不可少的。如果你没有这些,那是你应该解决的第一个问题。不是在每次重新加载之后,那太慢了。在每次重大代码更改之后,绝对是这样。一般来说,任何连接到rake test
,如果是rspec
或其他。我不知道你在哪里做重新加载
是您工作流程中非常关键的一部分,因此您可以在此基础上进行扩展。该特性的全部要点是快速重置控制台的状态,因此让它陷入功能堆的泥潭会适得其反。为什么不定义自己的命令来执行您想要的操作,并顺便调用reload代码>作为副作用?我会尝试在迭代类似的东西时使用模型和控制器测试,它们比手动操作要全面得多。通常,我只使用控制台来执行手动更新、创建记录或进行批量操作,这在Ruby中比在数据库中更容易实现。不过,希望你能找到解决问题的方法!很好,你知道怎么做了:)
class Rails::ConsoleMethods
def reload!
super
puts "test"
end
end
# you may want to include other dirs too
files = Dir[Rails.root + 'lib/**/*.rb'] + Dir[Rails.root + 'app/**/*.rb']
# fix for git mergetool
files.reject!{ |f| f =~ /_(BACKUP|BASE|REMOTE|LOCAL)_/}
files.each{ |f| RubyVM::InstructionSequence.compile_file(f) }