paper_trail对我们很有用。但是当我们使用heroku run console
登录到Heroku的控制台然后我们进行更改时,更改的发起者没有设置:(。所以paper_trail有一个机制:
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'"
然后我们每个人都可以使用我们的个人用户ID简单地创建一个console.sh
文件。或者是否有另一种自动化机制?
答案 0 :(得分:2)
您可以通过设置初始值设定项来避免手动执行此操作 从操作系统中获取当前用户的用户名
这基本上就是答案。将PaperTrail.whodunnit
代码放在config/initializers
中的初始值设定项中。这些在您启动控制台时运行。这将是最好的地方,因为当任何开发人员登录到heroku控制台而不必更改他们运行的命令时它会生效:
# config/initializers/default_whodunnit.rb
if defined?(Rails::Console)
PaperTrail.whodunnit = "whatever"
end
<强>更新强>
Heroku是一个git服务器,就像Github一样,但是你推送到heroku来启动部署。 MrYoshiji's answer提供了一个选项,让您的开发人员有机会陈述他们的用户名并将其设置为whodunnit。只需让他的答案代码示例default_whodunnit.rb
初始化程序的内容即可。通过这种方式,你可以检查whodunnit文件,推送到Heroku,现在每当dev登录到heroku控制台时,他们都会被问到他们的用户名,这将设置whodunnit
答案 1 :(得分: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
只有当您启动控制台时,系统才会要求用户填写用作更改作者的用户名。