Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails:自定义重新加载!检查语法_Ruby On Rails_Ruby_Rails Console - Fatal编程技术网

Ruby on 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的

我想定制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的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) }