【发布时间】:2012-12-19 15:22:11
【问题描述】:
在 Railscasts 335 部署到 vps 之后,我在 Rackspace 上的 Ubuntu 12.04 服务器上成功安装了 Rails (3.2.10) 应用程序。 Nginx、Unicorn、rbenv 和 Capistrano。
然后,当我尝试安装第二个 rails 网站时,我在 cap:deploy 期间收到错误“在任何源中都找不到 rake-10.0.3”。 cap:setup 和 cap:check 成功。此外,我的应用程序文件夹下没有当前目录。
如果我 cd 进入发布目录并运行 bundle install 它使用的是 rake-10.0.3。这两个应用程序之间的唯一区别是我尝试安装的新应用程序使用资产管道。
这是我的部署文件,这两个应用程序都相同,除了 set :application 指令。
set :user, 'mark'
set :scm_passphrase, 'xxxx'
set :domain, '99.99.99.99'
set :application, "my_app"
set :repository, "#{user}@#{domain}:git/#{application}.git"
ssh_options[:forward_agent] = true
set :deploy_to, "/var/www/#{application}"
role :app, domain
role :web, domain
role :db, domain, :primary => true
default_run_options[:pty] = true
set :deploy_via, :remote_cache
set :scm, 'git'
set :branch, 'master'
set :scm_verbose, true
set :use_sudo, false
after "deploy", "deploy:cleanup" # keep only the last 5 releases
namespace :deploy do
%w[start stop restart].each do |command|
desc "#{command} unicorn server"
task command, roles: :app, except: {no_release: true} do
run "/etc/init.d/unicorn_#{application} #{command}"
end
end
task :setup_config, roles: :app do
sudo "ln -nfs #{current_path}/config/nginx.conf /etc/nginx/sites-enabled/#{application}"
sudo "ln -nfs #{current_path}/config/unicorn_init.sh /etc/init.d/unicorn_#{application}"
run "mkdir -p #{shared_path}/config"
put File.read("config/database.yml"), "#{shared_path}/config/database.yml"
puts "Now edit the config files in #{shared_path}."
end
after "deploy:setup", "deploy:setup_config"
task :symlink_config, roles: :app do
run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml"
end
after "deploy:finalize_update", "deploy:symlink_config"
desc "Make sure local git is in sync with remote."
task :check_revision, roles: :web do
unless `git rev-parse HEAD` == `git rev-parse origin/master`
puts "WARNING: HEAD is not the same as origin/master"
puts "Run `git push` to sync changes."
exit
end
end
before "deploy", "deploy:check_revision"
end
【问题讨论】:
-
我终于通过使用 sudo 从我的主目录将 rails 和其他 gem 安装到系统来解决这个问题。很奇怪,因为第一个应用程序不需要这个。运行 bundle install 说所有都已经被使用了。接下来它无法启动 /etc/init.d/unicorn_myapp。我试图手动启动它,但一个错误声称它不存在
-
首先,capistrano 无法完成,因为它找不到任何宝石。尽管另一个应用程序运行良好,但仍然如此。因此,我将 gem 安装为系统 gem。 Bundle 似乎想使用这些而不是安装自己的 gem。现在运行 unicorn_rails -c /var/www/my_app/config/unicorn.rb -D 后独角兽不存在了
-
`initialize': 地址已经在使用 - /tmp/.sock (Errno::EADDRINUSE)
-
我的两个应用程序在 unicorn.rb 中都有这一行:listen "/tmp/.sock", :backlog => 64 这是除了 listen "/tmp/unicorn.my_app. sock”,这两个应用程序都不同。
-
看来您用于
socket文件的名称与您的应用程序相同。您可以尝试更改其中一个并重新启动 nginx 。socket文件的命名位于nginx.conf' file inconfig` 目录的server部分。更新后,您应该重新部署它以允许 capistrano 重新链接新形成的值。
标签: ruby-on-rails rake capistrano