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 中。项目根目录中还有一个 .rvmrc 文件,当您 cd 进入 capistrano 创建的“当前”目录时,它会加载正确的 gemset。

当我部署时,它在我的新任务中失败,说它找不到 sass。

stderr: bash: sass: command not found

我可以使用与 Capistrano 和 cd 部署到“当前”目录中的用户相同的用户身份登录服务器,并在任务中运行相同的命令(用实际路径替换 #{release_path}),它工作正常。

我尝试过的事情:

  1. 用以下内容重写执行命令:

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

  1. 编写一个可由部署者用户访问的 bash 脚本,该脚本加载 gemset 然后运行 ​​sass 命令(当我在任何目录中登录到服务器时运行新脚本时有效,从 capistrano 任务调用时无效)

  2. 使用 capistrano-rvm 插件(添加到 Gemfile,需要在 Capfile 中)设置 RVM gemset - 希望它会在运行任何命令之前加载 gemset。

我已经多次使用 Capistrano 部署 Rails 应用程序,并且总是使用处理预编译和诸如此类的资产插件......这是我用于部署 PHP 应用程序的第一个项目,也许是我第一次尝试手动运行capistrano 任务,它使用安装在带有 RVM 的服务器上的 ruby​​gem。

是否可以运行依赖于特定 gem/gemset 的任务......而不使用默认的 rails 插件?

任何帮助表示赞赏。

谢谢,JD

4

1 回答 1

0

figured this one out by requiring the capistrano/bundler command, just to see how capistrano runs bundle by default... copied the bundler command that was logged during a deploy, then modified it to work for what I was trying to do and finally removed the bundler plugin as I do not actually need the deploy to bundle anything.

without using any capistrano plugins, you can preface the capistrano task execute command with the location of the gemset like so:

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

The key difference is the following snippet prefaces the actual command I was trying initially:

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

Obviously, you could use whatever command requiring the gemset specified that you want (instead of the sass command I am using).

于 2015-06-04T21:30:45.707 回答