我在Rails 2.1上并且需要将Capistrano gem冻结到我的供应商文件夹(因为我的主机已经打破了他们的cap gem依赖关系,我想让自己尽可能独立)。
在我的本地Windows机器上,我将以下环境放在了我的环境中.rb
config.gem "capistrano", :version => "2.5.2"
config.gem "net-ssh", :lib => "net/ssh", :version => "2.0.4"
config.gem "net-scp", :lib => "net/scp", :version => "1.0.1"
config.gem "net-sftp", :lib => "net/sftp", :version => "2.0.1"
config.gem "net-ssh-gateway", :lib => "net/ssh/gateway", :version => "1.0.0"
已经安装了宝石,所以我冻结了它们。检查......
>rake gems
...
[F] capistrano = 2.5.2
[F] net-ssh = 2.0.4
[F] net-scp = 1.0.1
[F] net-sftp = 2.0.1
[F]net-ssh-gateway = 1.0.0
然后我在本地提交SVN并在prod Linux框上更新。
当我尝试运行我的冷冻版Capistrano时,我收到以下错误。
$ ./vendor/gems/capistrano-2.5.2/bin/cap deploy-with-migrations
./vendor/gems/capistrano-2.5.2/bin/cap:3:in `require': no such file to load --capistrano/cli (LoadError)
from ./vendor/gems/capistrano-2.5.2/bin/cap:3
任何想法我做错了什么?
答案 0 :(得分:2)
你没有做错任何事。您看到此问题是因为cap
下的capistrano/bin/cap
文件无意作为独立运行。如果您尝试从主gem文件夹运行它,您将看到相同的结果。 cap
可执行文件(存储在标准Linux安装上的/usr/bin/cap
)需要rubygems
,注册capistrano然后然后加载capistrano/bin/cap
文件。
对此的一个解决方案是将require 'rubygems'
添加到您的capistrano / bin / cap文件中:
#!/usr/bin/env ruby
require 'rubygems'
require 'capistrano/cli'
Capistrano::CLI.execute
如果您不想修改capistrano/bin/cap
,则可以在使用-r标志运行时特别包含rubygems库。你给出的命令看起来像这样:
$ ruby -r rubygems ./vendor/gems/capistrano-2.5.2/bin/cap deploy-with-migrations
答案 1 :(得分:1)
使用特定版本的Capistrano的另一种方法是,为您的.bash_login添加一个别名,如下所示:
alias cap1='cap _1.4.2_ '
其中cap1是您将运行的命令, 1.4.2 是您希望该命令运行的版本,然后您可以:
cap1 deploy
然后将使用该版本的capistrano来部署您的应用程序。