几个月来,我一直在使用 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 中。项目根目录中还有一个 .rvmrc 文件,当您 cd 进入 capistrano 创建的“当前”目录时,它会加载正确的 gemset。
当我部署时,它在我的新任务中失败,说它找不到 sass。
stderr: bash: sass: command not found
我可以使用与 Capistrano 和 cd 部署到“当前”目录中的用户相同的用户身份登录服务器,并在任务中运行相同的命令(用实际路径替换 #{release_path}),它工作正常。
我尝试过的事情:
- 用以下内容重写执行命令:
rvm 使用 2.1.5@deployer && sass #{release_path}/styles/test.scss #{release_path}/styles/test.css
编写一个可由部署者用户访问的 bash 脚本,该脚本加载 gemset 然后运行 sass 命令(当我在任何目录中登录到服务器时运行新脚本时有效,从 capistrano 任务调用时无效)
使用 capistrano-rvm 插件(添加到 Gemfile,需要在 Capfile 中)设置 RVM gemset - 希望它会在运行任何命令之前加载 gemset。
我已经多次使用 Capistrano 部署 Rails 应用程序,并且总是使用处理预编译和诸如此类的资产插件......这是我用于部署 PHP 应用程序的第一个项目,也许是我第一次尝试手动运行capistrano 任务,它使用安装在带有 RVM 的服务器上的 rubygem。
是否可以运行依赖于特定 gem/gemset 的任务......而不使用默认的 rails 插件?
任何帮助表示赞赏。
谢谢,JD