3

paper_trail отлично подходит для нас. Но когда мы войти в консоль Heroku с heroku run console и тогда мы делаем изменения, инициатор изменения не установлен :(Так paper_trail имеет механизм для этого:.Автоматическая настройка того, кто несет ответственность за изменение консоли в paper_trail в Heroku

In a console session you can manually set who is responsible like this: 

>> PaperTrail.whodunnit = 'Andy Stewart' 
>> widget.update_attributes :name => 'Wibble' 
>> widget.versions.last.whodunnit    # Andy Stewart 

You can avoid having to do this manually by setting your initializer to pick up the username of the current user from the OS, like this: 
<bunch of code> 

Мой вопрос заключается в том, как мы можем автоматизировать этот процесс с Heroku? есть ли может быть что-то вроде этого я могу сделать?

heroku run console -e "PaperTrail.whodunnit = '123:console'" 

Тогда каждый из нас мог бы просто создать console.sh файл выше, используя наши индивидуальные идентификаторы пользователей. Или есть другой механизм, чтобы автоматизировать этот процесс?

+1

Вы можете проверить, не является ли код запускается в консоли (http://stackoverflow.com/questions/13506690/how-to-determine-if-rails-is-running-from-cli-console-or-as-server); если да, то загрузите конкретный файл '.rb' (например, в config/whodunnit.rb), который будет запрашивать имя пользователя перед загрузкой остальных (благодаря классу STDIN) – MrYoshiji

ответ

0

Вы ку Л.Д. сделать это в файле application.rb:

if Rails.const_defined? 'Console' 
    STDOUT.print "Enter your name for PaperTrail.whodunnit : " 
    username = STDIN.gets.split("\n").first 
    puts "Hello #{username}!" 
    PaperTrail.whodunnit = username 
end 

Только тогда, когда вы запустите консоль, то пользователю будет предложено заполнить имя пользователя, которое будет использоваться в качестве автора изменений.

+0

Это здорово, я не знал вас может сделать это при запуске консоли. Хотя путь @ diego.greyrobot еще проще. –

+0

Где вы помещаете это в файл 'application.rb'? Я не могу заставить это работать при запуске консоли. Кажется, ничего в 'application.rb' вызывается при запуске консоли. –

+0

@at. Если я использую его в самом конце моего 'application.rb', когда я запускаю сервер, меня попросят ввести имя ТОЛЬКО при открытии консоли. В конце концов спровоцируйте ошибку в файле 'application.rb', чтобы убедиться, что Ruby ее читает (разделите целое число на ноль, попробуйте добавить массив к хешу, все, что могло бы вызвать ошибку на самом деле). – MrYoshiji

2

Вы можете избежать того, чтобы сделать это вручную, установив инициализатору подобрать имя текущего пользователя из ОС

Это в основном ответ. Поместите код PaperTrail.whodunnit в инициализатор в config/initializers. Они запускаются при запуске консоли. Это было бы самое лучшее место, так как он будет действовать при любом из дэвов входа в консоль Heroku без необходимости менять команду они бегут, чтобы сделать это:

# config/initializers/default_whodunnit.rb 
if defined?(Rails::Console) 
    PaperTrail.whodunnit = "whatever" 
end 

Update:

Heroku это git-сервер, как и Github, но вы нажимаете на герою, чтобы начать развертывание. MrYoshiji's answer предоставляет возможность предоставить вашим разработчикам возможность указать свои имена пользователей и установить их как whodunnit. Просто сделайте код своего ответа пример содержимого вашего инициализатора default_whodunnit.rb. Таким образом, вы проверите файл whodunnit, нажмите на Heroku, и теперь в любое время, когда разработчик войдет в консоль heroku, им будет предложено ввести свое имя пользователя и установить whodunnit

+0

Это жестко закодированное значение, которое противоположно тому, что хочет OP: он хочет иметь возможность просто спросить, кто запускает консоль, чтобы установить «whodunnit» PaperTrail, а не всегда использовать один и тот же идентификатор. – MrYoshiji

+0

Как вы знаете, вы можете поставить _whatever_ там. Не обязательно должно быть жестко запрограммированное значение. – DiegoSalazar

+0

Этот способ звучит идеально! У каждого разработчика просто будет свой собственный default_whodunnit.rb-файл, который не проверен в github ... –

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