1

Delayed Job Gemを使用してバックグラウンド タスクを実行するRails サイトがあります。バックグラウンド タスクは PDF を受け取り、それを一連の画像に変換します。

Rails アプリは「nobody」として実行され、遅延ジョブ プロセスは「root」として実行されます。

バックグラウンド タスクは正常に実行されますが、遅延ジョブ プロセスによって作成されたファイルを Rails アプリが削除しようとすると、問題が発生します。「アクセス許可が拒否されました」というメッセージが表示されます。したがって、「root」によって作成されたファイルを「誰も」削除することはできません。

ファイル/フォルダーのアクセス許可を次のように設定すると、問題を解決できます。

    chmod -R 755 

ただし、これは新しいファイルには影響しません。

root アカウントで Capistrano を使用して Rails アプリをデプロイしています。

私は Linux システム管理者としては初心者です。私が間違っているところを提案できますか?

どうもありがとう

4

2 に答える 2

1

delayed_job は独自の Capistrano レシピを提供します。これを使用して、アプリと同じユーザーを使用してサーバーを起動/停止できます。基本的には、ファイルに入れる必要がありrequire "delayed/recipes"ますdeploy.rbcap delayed_job:start次に、およびを使用して、 delayed_job をリモートで開始/停止できますcap delayed_job:stop

ウィキの詳細

于 2012-05-25T17:09:42.270 に答える
0

そこで、船員のアドバイスに従って問題を解決しました。基本的に、アプリを実行して展開するための新しいユーザーをセットアップしました。これが他の人に役立つかどうかはわかりませんが、サイトを別のユーザーに転送する方法は次のとおりです。

手順

  1. 「www」という名前の新しいユーザーを作成します

    useradd -d /home/www -m
    passwd www
    
  2. www に既存のファイルに対する制御を与えます。

    cd /path/to/site
    chmod -R g+ws *
    chgrp -R www *
    
  3. root アカウントで既存のdelayed_jobプロセスを強制終了しました

  4. サイトの仮想ホストを更新して、どのユーザーとして実行するかをパッセンジャーに伝えました

    PassengerDefaultUser  www
    
  5. deploy.rb でユーザー www を使用してデプロイするよう cap に指示します。

    set :user, "www"
    

これで、遅延ジョブ プロセスとサイト プロセスが「www」として実行され、問題が解決しました。

于 2012-06-01T13:45:04.787 に答える