1

Capistrano 3 を使用して数か月間 PHP アプリをデプロイしてきましたが、うまく機能しています。最近、スタイルシートに Sass の使用を開始することを決定し、現在これらの変更を展開しようとしています。

Sass gem を使用して scss ファイルを css に変換する残りのデプロイ作業が完了した後に実行されるタスクを作成しようとしています。

namespace :deploy do

  after :finished, :assets do
    on roles(:app), in: :sequence, wait: 5 do
      within release_path do
        # process sass files to css
        execute "sass #{release_path}/styles/test.scss #{release_path}/styles/test.css"
      end
    end
  end

end

サーバーで RVM を使用しており、sass gem を特定の gemset にインストールしています。プロジェクト ルートには、capistrano が作成する「現在の」ディレクトリに cd したときに正しい gemset をロードする .rvmrc ファイルもあります。

デプロイすると、新しいタスクが失敗し、sass が見つからないというメッセージが表示されます。

stderr: bash: sass: command not found

Capistrano でデプロイするために使用されるのと同じユーザーとしてサーバーにログインし、「現在の」ディレクトリに cd して、タスクで同じコマンドを実行し (#{release_path} を実際のパスに置き換えます)、正常に動作します。

私が試したこと:

  1. 実行コマンドを次のように書き換えます。

rvm use 2.1.5@deployer && sass #{release_path}/styles/test.scss #{release_path}/styles/test.css

  1. gemsetをロードしてsassコマンドを実行する、デプロイヤーユーザーがアクセスできるbashスクリプトを作成します(任意のディレクトリでサーバーにログインしているときに新しいスクリプトを実行すると機能し、capistranoタスクから呼び出された場合は機能しません)

  2. capistrano-rvm プラグイン (Gemfile に追加、Capfile で必要) を使用して RVM gemset を設定します - コマンドを実行する前に gemset をロードすることを期待します。

私は Rails アプリのデプロイに Capistrano を何度も使用しており、プリコンパイルなどを処理するアセット プラグインを常に使用しています。これは、PHP アプリのデプロイに使用した最初のプロジェクトであり、手動でRVM でサーバーにインストールされた ruby​​gem を使用する capistrano タスク。

特定の gem/gemset に依存するタスクを実行することはできますか? デフォルトの Rails プラグインを使用せずに...

どんな助けでも大歓迎です。

ありがとう、JD

4

1 に答える 1

0

capistrano / bundlerコマンドを要求することでこれを理解し、capistranoがデフォルトでバンドルを実行する方法を確認しました...デプロイ中にログに記録されたbundlerコマンドをコピーし、それを変更して、私がやろうとしていたことのために動作し、最終的に削除しましたバンドラープラグインは、実際には何かをバンドルするために展開する必要がないためです。

カピストラーノ プラグインを使用せずに、次のようにジェムセットの場所をカピストラーノ タスク実行コマンドの前に付けることができます。

after :finished, :assets do
  on roles(:app), in: :sequence, wait: 5 do
    within release_path do
      execute "~/.rvm/bin/rvm ruby-2.1.5@deployer do sass #{release_path}/styles/sass/screen.scss #{release_path}/styles/screen.css"
    end
  end
end

主な違いは、次のスニペットが、最初に試した実際のコマンドの前にあることです。

~/.rvm/bin/rvm ruby-2.1.5@deployer do ....

明らかに、(私が使用している sass コマンドの代わりに) 必要な指定された gemset を必要とするコマンドを使用できます。

于 2015-06-04T21:30:45.707 に答える