背景故事
我使用的是Rails 2.1,需要将Capistrano gem冻结到我的供应商文件夹中(因为我的主机破坏了他们的gem依赖,我想让自己尽可能独立)。
在我本地的windows机器上,我放入了下面的environment.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"gems已经安装好了,所以我冻结了它们。正在检查...
>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你知道我做错了什么吗?
更新
发布于 2008-12-02 07:46:42
你没有做错任何事。您之所以会看到这个问题,是因为capistrano/bin/cap下的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发布于 2009-03-13 11:41:34
使用特定版本的Capistrano的另一种方法是,向您的.bash_login添加别名,如下所示:
alias cap1='cap _1.4.2_ '其中cap1是您将运行的命令,1.4.2是您希望该命令运行的版本,那么您可以:
cap1 deploy然后使用该版本的capistrano来部署您的应用程序。
https://stackoverflow.com/questions/333072
复制相似问题