Ruby Capistrano 3中的任务找不到RVM

Ruby Capistrano 3中的任务找不到RVM,ruby,capistrano,capistrano3,rvm-capistrano,Ruby,Capistrano,Capistrano3,Rvm Capistrano,几个月来,我一直在使用Capistrano3部署PHP应用程序,效果非常好。最近,我们决定开始在样式表中使用Sass,我现在正尝试部署这些更改 我正在尝试编写一个任务,该任务在部署的其余部分完成后运行,使用Sass gem将scss文件转换为css namespace :deploy do after :finished, :assets do on roles(:app), in: :sequence, wait: 5 do within release_path d

几个月来,我一直在使用Capistrano3部署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安装在特定的GEMS集中。项目根目录中还有一个.rvmrc文件,当您将cd刻录到capistrano创建的“当前”目录中时,该文件将加载正确的gemset

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

stderr: bash: sass: command not found
我可以作为使用Capistrano和cd部署到“current”目录的同一用户登录到服务器,并在任务中运行相同的命令(用实际路径替换#{release_path}),并且工作正常

我尝试过的事情:

  • 使用以下命令重写execute命令:
  • rvm使用2.1。5@deployer&&sass{release#u path}/styles/test.scss{release#u path}/styles/test.css

  • 编写加载gemset的部署程序用户可以访问的bash脚本,然后运行sass命令(在登录到任何目录的服务器时运行新脚本时有效,从capistrano任务调用时无效)

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

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

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

    感谢您的帮助

    谢谢,
    JD通过使用capistrano/bundler命令解决了这个问题,只是想看看capistrano在默认情况下是如何运行bundle的。。。复制了部署过程中记录的bundler命令,然后对其进行了修改,使其适用于我尝试执行的操作,最后删除了bundler插件,因为我实际上不需要部署来捆绑任何东西

    在不使用任何capistrano插件的情况下,您可以在capistrano task execute命令前面加上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命令)。

    通过需要capistrano/bundler命令来解决这个问题,只是为了看看capistrano在默认情况下是如何运行bundle的。。。复制了部署过程中记录的bundler命令,然后对其进行了修改,使其适用于我尝试执行的操作,最后删除了bundler插件,因为我实际上不需要部署来捆绑任何东西

    在不使用任何capistrano插件的情况下,您可以在capistrano task execute命令前面加上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命令)