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'"

次に、それぞれがconsole.sh個々のユーザー ID を使用して、上記のファイルを簡単に作成できます。または、これを自動化する別のメカニズムはありますか?

4

2 に答える 2

2

OS から現在のユーザーのユーザー名を取得するように初期化子を設定することで、これを手動で行う必要がなくなります。

それが基本的に答えです。PaperTrail.whodunnitのイニシャライザにコードを配置しますconfig/initializers。これらは、コンソールの起動時に実行されます。これは、実行するコマンドを変更することなく、開発者が heroku コンソールにログインしたときに有効になるため、最適な場所です。

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

アップデート:

Heroku は Github と同じように git サーバーですが、heroku にプッシュしてデプロイを開始します。MrYoshiji's answerは、開発者にユーザー名を述べて、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 に答える