3

paper_trail非常适合我们。但是当我们登录到 Heroku 的控制台heroku run console然后我们进行更改时,更改的发起者没有设置:(。所以 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包含上述内容的文件。或者是否有另一种机制可以自动执行此操作?

4

2 回答 2

2

您可以通过将初始化程序设置为从操作系统中获取当前用户的用户名来避免手动执行此操作

这基本上就是答案。将PaperTrail.whodunnit代码放在config/initializers. 这些在您启动控制台时运行。那将是最好的地方,因为它会在任何开发人员登录到 heroku 控制台时生效,而无需更改他们运行的命令:

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

更新:

Heroku 是一个 git 服务器,就像 Github 一样,但是你推送到 heroku 来启动部署。MrYoshiji 的回答提供了一个选项,让您的开发人员有机会声明他们的用户名并将其设置为 whodunnit。只需将他的答案的代码示例作为default_whodunnit.rb初始化程序的内容即可。这样,您将签入 whodunnit 文件,推送到 Heroku,现在任何时候开发人员登录到 heroku 控制台时,他们都会被要求输入用户名,这将设置 whodunnit

于 2015-04-06T20:06:30.803 回答
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

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

于 2015-04-06T20:05:39.093 回答