2015-11-02 2 views
0

Я хотел бы настроить команду rails console reload! так, чтобы после перезагрузки она также проверила синтаксис, например. с ruby -c.рельсы: настроить перезагрузку! для проверки синтаксиса

После ответа Caillou «s Я попытался добавить следующее #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, например,

bundler-1.10.6/lib/bundler/source/git.rb:191:in `rescue in load_spec_files': git://github.com/josevalim/inherited_resources.git (at master) is not yet checked out. Run `bundle install` first. (Bundler::GitError)

Однако запуск ruby -c на тот же файл с отпечатками оболочки syntax OK

+0

Зачем вам нужно, чтобы проверить синтаксис? Если это недействительно, ваш код будет выходить из строя в любом случае. – tadman

+0

Если у вас есть доступ к нему позже, это будет ошибка только после долгого времени. – dimid

+0

Это точно, почему важно иметь надежный набор тестов модели, контроллера и интеграции. Если у вас нет тех, это первая проблема, которую вы должны исправить. – tadman

ответ

0

Вы можете найти класс хостинг в reload! метод, как это:

method(:reload!) 
=> #<Method: Object(Rails::ConsoleMethods)#reload!> 

Я думаю, вы должны повторно откройте класс Rails::ConsoleMethods и переопределите метод reload!, чтобы добавить нужное поведение. Но мне не удалось это сделать самому, может быть, кто-то еще может добавить свои знания в ответ.

Вот что я пробовал:

class Rails::ConsoleMethods 
    def reload! 
    super 
    puts "test" 
    end 
end 

Это не печатает мой «тест» строку, когда я использую reload!. Я не знаю, что случилось, но я почти уверен, что это то, что вам нужно делать.

+0

Thx, мне удается распечатать «тест», но он печатает даже при вводе синтаксических ошибок. Я попытался изменить 'reload!'. См. Обновленный вопрос. – dimid

+0

Вы пытались запустить «bundle install», как сообщает вам сообщение об ошибке? – Caillou

+0

Да, но это не имело никакого эффекта. Как я уже сказал, он отлично работает с оболочкой. – dimid

0

Я добавил следующее #reload! в railties-4.2.2/lib/rails/console/app.rb, как описано here:

# 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) } 
+0

Приятно, вы узнали, что делать :) – Caillou

Смежные вопросы