Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rake在Capistrano部署中失败_Ruby On Rails_Ubuntu_Rake_Capistrano - Fatal编程技术网

Ruby on rails Rake在Capistrano部署中失败

Ruby on rails Rake在Capistrano部署中失败,ruby-on-rails,ubuntu,rake,capistrano,Ruby On Rails,Ubuntu,Rake,Capistrano,我正在使用Capistrano部署到Ubuntu 我已经为后台进程设置了God+Resque 该应用程序运行良好,Resque工作人员正在排队,但却被困在那里。当我查看原木时,我发现是耙子坏了。以下是跟踪: FIRST THERE IS ABOUT 1000 OF THE BELOW LINE /home/ubuntu/myapp/releases/20120724024732/config/application.rb:68:in `invoke' /home/ubuntu/myapp/sh

我正在使用Capistrano部署到Ubuntu

我已经为后台进程设置了God+Resque

该应用程序运行良好,Resque工作人员正在排队,但却被困在那里。当我查看原木时,我发现是耙子坏了。以下是跟踪:

FIRST THERE IS ABOUT 1000 OF THE BELOW LINE

/home/ubuntu/myapp/releases/20120724024732/config/application.rb:68:in `invoke'
/home/ubuntu/myapp/shared/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:116:in `invoke_task'
/home/ubuntu/myapp/shared/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `block (2 levels) in top_level'
/home/ubuntu/myapp/shared/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `each'
/home/ubuntu/myapp/shared/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `block in top_level'
/home/ubuntu/myapp/shared/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/home/ubuntu/myapp/shared/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:88:in `top_level'
/home/ubuntu/myapp/shared/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:66:in `block in run'
/home/ubuntu/myapp/shared/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/home/ubuntu/myapp/shared/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:63:in `run'
/home/ubuntu/myapp/shared/bundle/ruby/1.9.1/gems/rake-0.9.2.2/bin/rake:33:in `<top (required)>'
/home/ubuntu/.rvm/gems/ruby-1.9.3-p125@global/bin/rake:19:in `load'
/home/ubuntu/.rvm/gems/ruby-1.9.3-p125@global/bin/rake:19:in `<main>'
/home/ubuntu/.rvm/gems/ruby-1.9.3-p125/bin/ruby_noexec_wrapper:14:in `eval'
/home/ubuntu/.rvm/gems/ruby-1.9.3-p125/bin/ruby_noexec_wrapper:14:in `<main>'
rake aborted!
Too many open files - rake_tasks_log.log
/home/ubuntu/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/open-uri.rb:35:in `initialize'
/home/ubuntu/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/open-uri.rb:35:in `open'
/home/ubuntu/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/open-uri.rb:35:in `open'
/home/ubuntu/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/logger.rb:592:in `open_logfile'
/home/ubuntu/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/logger.rb:549:in `initialize'
/home/ubuntu/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/logger.rb:314:in `new'
/home/ubuntu/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/logger.rb:314:in `initialize'
/home/ubuntu/myapp/shared/bundle/ruby/1.9.1/gems/activesupport-3.2.6/lib/active_support/core_ext/logger.rb:72:in `initialize'
**编辑::这里有一个线索,但不知道如何处理::显然,正在传递的*args是一个空数组

这是我的deploy.rb

require "bundler/capistrano"


$:.unshift(File.expand_path('./lib', ENV['rvm_path']))
require 'rvm/capistrano'
set :rvm_ruby_string, ENV['GEM_HOME'].gsub(/.*\//,"") 
set :rvm_type, :user


# -*- encoding : utf-8 -*-

set :assets_dependencies, %w(app/assets lib/assets vendor/assets Gemfile.lock config/routes.rb)

namespace :deploy do
  namespace :assets do

    desc <<-DESC
      Run the asset precompilation rake task. You can specify the full path \
      to the rake executable by setting the rake variable. You can also \
      specify additional environment variables to pass to rake via the \
      asset_env variable. The defaults are:

        set :rake,      "rake"
        set :rails_env, "production"
        set :asset_env, "RAILS_GROUPS=assets"
        set :assets_dependencies, fetch(:assets_dependencies) + %w(config/locales/js)
    DESC
    task :precompile, :roles => :web, :except => { :no_release => true } do
      from = source.next_revision(current_revision)
      if capture("cd #{latest_release} && #{source.local.log(from)} #{assets_dependencies.join ' '} | wc -l").to_i > 0
        run %Q{cd #{latest_release} && #{rake} RAILS_ENV=#{rails_env} #{asset_env} assets:precompile}
      else
        logger.info "Skipping asset pre-compilation because there were no asset changes"
      end
    end

  end
end

set :application, "myapp"

set :repository, "git@github.com:..."
set :scm, :git
set :git_shallow_clone, 1
set :branch, "master"

set :location, "ec2-....amazonaws.com"
role :app, location
role :web, location
role :db,  location, :primary => true

set :deploy_via, :remote_cache


set :user, "ubuntu"
set :use_sudo, false
set :deploy_to, "/home/ubuntu/myapp"
ssh_options[:forward_agent] = true
default_run_options[:pty] = true
ssh_options[:keys] = ["#{ENV['HOME']}/...pem"]

set :keep_releases, 1

# setup some Capistrano roles
role :app, location
role :web, location
role :db,  location, :primary => true

set :default_environment, { 
  'PATH' => "/home/ubuntu/.rvm/gems/ruby-1.9.3-p125/bin:/home/ubuntu/.rvm/gems/ruby-1.9.3-p125@global/bin:/home/ubuntu/.rvm/rubies/ruby-1.9.3-p194/bin:/home/ubuntu/.rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/lib/pkgconfig:/usr/lib/jvm/java-1.6.0-openjdk-amd64:/usr/lib/jvm/java-6-openjdk-amd64:$PATH",
  'JAVA_HOME' => "/usr/lib/jvm/java-6-openjdk-amd64",
  'PKG_CONFIG_PATH' => '$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig'

}


desc "show path"
task :show_path do
  run "echo $PATH"
end

###PASSENGER:

namespace :passenger do
    desc "Restart Application"
    task :restart do
    run 'sudo /etc/init.d/nginx stop'
        run 'sudo /etc/init.d/nginx start'
    end
end


after :deploy, "passenger:restart"
after :deploy, "deploy:migrate"
需要“bundler/capistrano”
$:.unshift(File.expand_path('./lib',ENV['rvm_path']))
需要“rvm/capistrano”
set:rvm_ruby_字符串,ENV['GEM_HOME'].gsub(/.*\/,“”)
设置:rvm_类型,:用户
#-*-编码:utf-8-*-
set:assets\u依赖项,%w(app/assets lib/assets vendor/assets Gemfile.lock config/routes.rb)
名称空间:deploydo
名称空间:资产做什么
desc{:no_release=>true}do
from=来源。下一个修订版(当前修订版)
如果捕获(“cd#{latest_release}&&#{source.local.log(from)}#{assets_dependencies.join'}| wc-l”)。到_i>0
运行%Q{cd}{lake}RAILS{u ENV={RAILS{u ENV}{asset}ENV}asset:precompile}
其他的
logger.info“跳过资产预编译,因为没有资产更改”
结束
结束
结束
结束
设置:应用程序,“myapp”
集合:存储库,“git@github.com:..."
set:scm,:git
集:git_浅_克隆,1
集合:分支,“主”
设置:位置,“ec2-…amazonaws.com”
角色:应用程序、位置
角色:网站、位置
角色:db,位置,:primary=>true
set:deploy\u via,:remote\u缓存
设置:用户“ubuntu”
设置:使用_sudo,false
设置:将_部署到“/home/ubuntu/myapp”
ssh_选项[:转发_代理]=真
默认运行选项[:pty]=真
ssh_选项[:keys]=[“#{ENV['HOME']}/…pem”]
设置:保持释放,1
#设置一些Capistrano角色
角色:应用程序、位置
角色:网站、位置
角色:db,位置,:primary=>true
set:默认的_环境,{
'PATH'=>“/home/ubuntu/.rvm/gems/ruby-1.9.3-p125/bin:/home/ubuntu/.rvm/gems/ruby-1.9.3-p125@global/bin:/home/ubuntu/.rvm/rubies/ruby-1.9.3-p194/bin:/home/ubuntu/.rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/sbin:/usr/games:/usr/local/lib/pkgconfig:/usr/lib/jvm/java-1.6.0-openjd48:/usr/lib/jvm/java-6-openjdk-amd64:$PATH“,
“JAVA_HOME”=>“/usr/lib/jvm/JAVA-6-openjdk-amd64”,
“PKG_CONFIG_PATH'=>“$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig”
}
描述“显示路径”
任务:显示路径do
运行“echo$PATH”
结束
###乘客:
名称空间:passenger do
描述“重新启动应用程序”
任务:重新启动do
运行“sudo/etc/init.d/nginx stop”
运行“sudo/etc/init.d/nginx start”
结束
结束
之后:展开,“乘客:重新启动”
在:部署之后,“部署:迁移”

最后一点-如果我不使用Capistrano,一切都正常(例如,只需将Rails应用程序文件夹复制到服务器)。。因此,我猜我在Capistrano方面遗漏了一些内容。

因此,我的redis文件夹出现权限问题,无法写入数据库。所以我检查了数据库文件保存的位置(或者说在我的例子中没有保存),并做了sudo chown redis:redis现在一切正常

require "bundler/capistrano"


$:.unshift(File.expand_path('./lib', ENV['rvm_path']))
require 'rvm/capistrano'
set :rvm_ruby_string, ENV['GEM_HOME'].gsub(/.*\//,"") 
set :rvm_type, :user


# -*- encoding : utf-8 -*-

set :assets_dependencies, %w(app/assets lib/assets vendor/assets Gemfile.lock config/routes.rb)

namespace :deploy do
  namespace :assets do

    desc <<-DESC
      Run the asset precompilation rake task. You can specify the full path \
      to the rake executable by setting the rake variable. You can also \
      specify additional environment variables to pass to rake via the \
      asset_env variable. The defaults are:

        set :rake,      "rake"
        set :rails_env, "production"
        set :asset_env, "RAILS_GROUPS=assets"
        set :assets_dependencies, fetch(:assets_dependencies) + %w(config/locales/js)
    DESC
    task :precompile, :roles => :web, :except => { :no_release => true } do
      from = source.next_revision(current_revision)
      if capture("cd #{latest_release} && #{source.local.log(from)} #{assets_dependencies.join ' '} | wc -l").to_i > 0
        run %Q{cd #{latest_release} && #{rake} RAILS_ENV=#{rails_env} #{asset_env} assets:precompile}
      else
        logger.info "Skipping asset pre-compilation because there were no asset changes"
      end
    end

  end
end

set :application, "myapp"

set :repository, "git@github.com:..."
set :scm, :git
set :git_shallow_clone, 1
set :branch, "master"

set :location, "ec2-....amazonaws.com"
role :app, location
role :web, location
role :db,  location, :primary => true

set :deploy_via, :remote_cache


set :user, "ubuntu"
set :use_sudo, false
set :deploy_to, "/home/ubuntu/myapp"
ssh_options[:forward_agent] = true
default_run_options[:pty] = true
ssh_options[:keys] = ["#{ENV['HOME']}/...pem"]

set :keep_releases, 1

# setup some Capistrano roles
role :app, location
role :web, location
role :db,  location, :primary => true

set :default_environment, { 
  'PATH' => "/home/ubuntu/.rvm/gems/ruby-1.9.3-p125/bin:/home/ubuntu/.rvm/gems/ruby-1.9.3-p125@global/bin:/home/ubuntu/.rvm/rubies/ruby-1.9.3-p194/bin:/home/ubuntu/.rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/lib/pkgconfig:/usr/lib/jvm/java-1.6.0-openjdk-amd64:/usr/lib/jvm/java-6-openjdk-amd64:$PATH",
  'JAVA_HOME' => "/usr/lib/jvm/java-6-openjdk-amd64",
  'PKG_CONFIG_PATH' => '$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig'

}


desc "show path"
task :show_path do
  run "echo $PATH"
end

###PASSENGER:

namespace :passenger do
    desc "Restart Application"
    task :restart do
    run 'sudo /etc/init.d/nginx stop'
        run 'sudo /etc/init.d/nginx start'
    end
end


after :deploy, "passenger:restart"
after :deploy, "deploy:migrate"