Capistrano 3中的任务找不到RVM

时间:2015-06-04 17:17:14

标签: ruby capistrano capistrano3 rvm-capistrano

我一直在使用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并在特定的gemset中安装了sass gem。项目根目录中还有一个.rvmrc文件,当你进入当前的'时加载正确的gemset。 capistrano创建的目录。

当我部署时,它在我的新任务上失败,说它无法找到sass。

stderr: bash: sass: command not found

我可以作为用于与Capistrano一起部署的同一用户登录服务器并将cd插入到当前的'目录并在任务中运行相同的命令(用实际路径替换#{release_path})并且它工作正常。

我尝试过的事情:

  1. 使用以下内容重写执行命令:
  2. rvm使用2.1.5@deployer&& sass#{release_path} /styles/test.scss# {release_path} /styles/test.css

    1. 编写可由加载gemset的部署用户访问的bash脚本然后运行sass命令(当我在任何目录中登录服务器时运行新脚本时工作,从capistrano任务调用时不起作用)

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

    3. 我已经多次使用Capistrano来部署Rails应用程序并且始终使用处理预编译的资产插件等等......这是我用于部署PHP应用程序的第一个项目,也许是我第一次尝试手动运行capistrano任务,该任务使用安装在RVM服务器上的rubygem。

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

      感谢任何帮助。

      谢谢, JD

1 个答案:

答案 0 :(得分:0)

通过要求capistrano / bundler命令想出这个,只是为了看看capistrano如何默认运行bundle ...复制了在部署期间记录的bundler命令,然后将其修改为我试图做的工作最后删除了bundler插件,因为我实际上并不需要部署来捆绑任何东西。

不使用任何capistrano插件,你可以在capistrano任务执行命令前面加上gemset的位置,如下所示:

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 ....

显然,您可以使用任何需要指定gemset的命令(而不是我正在使用的sass命令)。