【发布时间】:2015-08-19 10:33:33
【问题描述】:
几个月来我一直在使用 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。
是否可以在不使用默认 rails 插件的情况下运行依赖于特定 gem/gemset 的任务?
感谢任何帮助。
谢谢, 京东
【问题讨论】:
标签: ruby capistrano capistrano3 rvm-capistrano