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} を実際のパスに置き換えます)、正常に動作します。
私が試したこと:
- 実行コマンドを次のように書き換えます。
rvm use 2.1.5@deployer && sass #{release_path}/styles/test.scss #{release_path}/styles/test.css
gemsetをロードしてsassコマンドを実行する、デプロイヤーユーザーがアクセスできるbashスクリプトを作成します(任意のディレクトリでサーバーにログインしているときに新しいスクリプトを実行すると機能し、capistranoタスクから呼び出された場合は機能しません)
capistrano-rvm プラグイン (Gemfile に追加、Capfile で必要) を使用して RVM gemset を設定します - コマンドを実行する前に gemset をロードすることを期待します。
私は Rails アプリのデプロイに Capistrano を何度も使用しており、プリコンパイルなどを処理するアセット プラグインを常に使用しています。これは、PHP アプリのデプロイに使用した最初のプロジェクトであり、手動でRVM でサーバーにインストールされた rubygem を使用する capistrano タスク。
特定の gem/gemset に依存するタスクを実行することはできますか? デフォルトの Rails プラグインを使用せずに...
どんな助けでも大歓迎です。
ありがとう、JD