在Heroku中的paper_trail中自动设置谁负责控制台中的更改

时间:2015-04-06 19:58:15

标签: ruby-on-rails ruby-on-rails-4 heroku ruby-on-rails-4.2 paper-trail-gem

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文件。或者是否有另一种自动化机制?

2 个答案:

答案 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

只有当您启动控制台时,系统才会要求用户填写用作更改作者的用户名。