【问题标题】:Rails 4, Capistrano 3 fail during bundle exec rake assets:precompile and returns rake stdout: NothingRails 4,Capistrano 3 在 bundle exec rake assets 期间失败:预编译并返回 rake stdout:Nothing
【发布时间】:2014-04-08 06:50:22
【问题描述】:

在 rake assets 期间使用 Capistrano 部署失败:预编译:

/usr/local/rvm/bin/rvm ruby-2.0.0-p353 do bundle exec rake assets:precompile

提示响应此错误:

INFO [b438501f] Running /usr/local/rvm/bin/rvm ruby-2.0.0-p353 do bundle exec rake assets:precompile on 123.123.123.123

cap aborted!
rake stdout: Nothing written
rake stderr: Nothing written
/Users/osiris/.rvm/gems/ruby-2.0.0-p353/gems/sshkit-1.3.0/lib/sshkit/command.rb:94:in `exit_status='
/Users/osiris/.rvm/gems/ruby-2.0.0-p353/gems/sshkit-1.3.0/lib/sshkit/backends/netssh.rb:142:in `block (4 levels) in _execute'
/Users/osiris/.rvm/gems/ruby-2.0.0-p353/gems/net-ssh-2.8.0/lib/net/ssh/connection/channel.rb:551:in `call'
/Users/osiris/.rvm/gems/ruby-2.0.0-p353/gems/net-ssh-2.8.0/lib/net/ssh/connection/channel.rb:551:in `do_request'
/Users/osiris/.rvm/gems/ruby-2.0.0-p353/gems/net-ssh-2.8.0/lib/net/ssh/connection/session.rb:561:in `channel_request'
/Users/osiris/.rvm/gems/ruby-2.0.0-p353/gems/net-ssh-2.8.0/lib/net/ssh/connection/session.rb:465:in `dispatch_incoming_packets'
/Users/osiris/.rvm/gems/ruby-2.0.0-p353/gems/net-ssh-2.8.0/lib/net/ssh/connection/session.rb:221:in `preprocess'
/Users/osiris/.rvm/gems/ruby-2.0.0-p353/gems/net-ssh-2.8.0/lib/net/ssh/connection/session.rb:205:in `process'
/Users/osiris/.rvm/gems/ruby-2.0.0-p353/gems/net-ssh-2.8.0/lib/net/ssh/connection/session.rb:169:in `block in loop'
/Users/osiris/.rvm/gems/ruby-2.0.0-p353/gems/net-ssh-2.8.0/lib/net/ssh/connection/session.rb:169:in `loop'
/Users/osiris/.rvm/gems/ruby-2.0.0-p353/gems/net-ssh-2.8.0/lib/net/ssh/connection/session.rb:169:in `loop'
/Users/osiris/.rvm/gems/ruby-2.0.0-p353/gems/net-ssh-2.8.0/lib/net/ssh/connection/channel.rb:269:in `wait'
/Users/osiris/.rvm/gems/ruby-2.0.0-p353/gems/sshkit-1.3.0/lib/sshkit/backends/netssh.rb:164:in `block (2 levels) in _execute'
/Users/osiris/.rvm/gems/ruby-2.0.0-p353/gems/net-ssh-2.8.0/lib/net/ssh/connection/channel.rb:514:in `call'
/Users/osiris/.rvm/gems/ruby-2.0.0-p353/gems/net-ssh-2.8.0/lib/net/ssh/connection/channel.rb:514:in `do_open_confirmation'
/Users/osiris/.rvm/gems/ruby-2.0.0-p353/gems/net-ssh-2.8.0/lib/net/ssh/connection/session.rb:545:in `channel_open_confirmation'
/Users/osiris/.rvm/gems/ruby-2.0.0-p353/gems/net-ssh-2.8.0/lib/net/ssh/connection/session.rb:465:in `dispatch_incoming_packets'
/Users/osiris/.rvm/gems/ruby-2.0.0-p353/gems/net-ssh-2.8.0/lib/net/ssh/connection/session.rb:221:in `preprocess'
/Users/osiris/.rvm/gems/ruby-2.0.0-p353/gems/net-ssh-2.8.0/lib/net/ssh/connection/session.rb:205:in `process'
/Users/osiris/.rvm/gems/ruby-2.0.0-p353/gems/net-ssh-2.8.0/lib/net/ssh/connection/session.rb:169:in `block in loop'
/Users/osiris/.rvm/gems/ruby-2.0.0-p353/gems/net-ssh-2.8.0/lib/net/ssh/connection/session.rb:169:in `loop'
/Users/osiris/.rvm/gems/ruby-2.0.0-p353/gems/net-ssh-2.8.0/lib/net/ssh/connection/session.rb:169:in `loop'
/Users/osiris/.rvm/gems/ruby-2.0.0-p353/gems/sshkit-1.3.0/lib/sshkit/backends/netssh.rb:166:in `block in _execute'
/Users/osiris/.rvm/gems/ruby-2.0.0-p353/gems/sshkit-1.3.0/lib/sshkit/backends/netssh.rb:123:in `tap'
/Users/osiris/.rvm/gems/ruby-2.0.0-p353/gems/sshkit-1.3.0/lib/sshkit/backends/netssh.rb:123:in `_execute'
/Users/osiris/.rvm/gems/ruby-2.0.0-p353/gems/sshkit-1.3.0/lib/sshkit/backends/netssh.rb:66:in `execute'
/Users/osiris/.rvm/gems/ruby-2.0.0-p353/gems/capistrano-rails-1.1.1/lib/capistrano/tasks/assets.rake:59:in `block (6 levels) in <top (required)>'
/Users/osiris/.rvm/gems/ruby-2.0.0-p353/gems/sshkit-1.3.0/lib/sshkit/backends/abstract.rb:89:in `with'
/Users/osiris/.rvm/gems/ruby-2.0.0-p353/gems/capistrano-rails-1.1.1/lib/capistrano/tasks/assets.rake:58:in `block (5 levels) in <top (required)>'
/Users/osiris/.rvm/gems/ruby-2.0.0-p353/gems/sshkit-1.3.0/lib/sshkit/backends/abstract.rb:81:in `within'
/Users/osiris/.rvm/gems/ruby-2.0.0-p353/gems/capistrano-rails-1.1.1/lib/capistrano/tasks/assets.rake:57:in `block (4 levels) in <top (required)>'
/Users/osiris/.rvm/gems/ruby-2.0.0-p353/gems/sshkit-1.3.0/lib/sshkit/backends/netssh.rb:54:in `instance_exec'
/Users/osiris/.rvm/gems/ruby-2.0.0-p353/gems/sshkit-1.3.0/lib/sshkit/backends/netssh.rb:54:in `run'
/Users/osiris/.rvm/gems/ruby-2.0.0-p353/gems/sshkit-1.3.0/lib/sshkit/runners/parallel.rb:12:in `block (2 levels) in execute'
Tasks: TOP => deploy:assets:precompile
(See full trace by running task with --trace)
The deploy has failed with an error: #<SSHKit::Command::Failed: rake stdout: Nothing written
rake stderr: Nothing written
>

这是我的 debloy.rb

# config valid only for Capistrano 3.1
lock '3.1.0'

set :application, 'Myapp'
set :repo_url, 'git@github.com:randomuser/myapp.git'

set :deploy_to, '/var/www/myapp'

set :rvm_ruby_version, 'ruby-2.0.0-p353'

set :log_level, :info

set :linked_files, %w{config/database.yml}

set :keep_releases, 20

# SSHKit.config.output_verbosity = :debug
SSHKit.config.output = $stdout
SSHKit.config.output_verbosity = Logger::DEBUG
SSHKit.config.command_map[:rake] = "bundle exec rake"
SSHKit.config.command_map[:rails] = "bundle exec rails"

set :normalize_asset_timestamps, %{public/images public/javascripts public/stylesheets}

namespace :deploy do

  desc 'Restart application'
  task :restart do
    on roles(:app), in: :sequence, wait: 5 do

      # Your restart mechanism here, for example:
      execute :touch, release_path.join('tmp/restart.txt')
    end
  end

  after :publishing, :restart

  after :restart, :clear_cache do
    on roles(:web), in: :groups, limit: 3, wait: 10 do
      # Here we can do anything such as:
      within release_path do
        execute :rake, 'cache:clear'
      end
    end
  end

  after :finishing, "deploy:cleanup"
end

您可以在此 Gist 上找到有关此问题的更多详细信息: https://gist.github.com/richardsondx/10092890 我注意到,即使我在 production.rb 中提到了环境,rake 任务中也没有提到它。用 RAILS_ENV=production

覆盖命令的前缀可能会有所帮助

我试图用以下内容覆盖任务:

namespace :deploy do

  namespace :assets do
    task :precompile do
      on roles(fetch(:assets_roles)) do
        within release_path do
          with rails_env: fetch(:rails_env) do
            execute :rake, "assets:precompile RAILS_ENV=production"
          end
        end
      end
    end
  end
end

但它并没有覆盖它。

【问题讨论】:

  • 尝试在本地框中预编译资产,您的 sass 或 coffee/js 文件中可能有错误
  • 您使用哪个 gem 来管理 Capistrano 的 rvm ?如果您使用的是capistrano-rvm,我认为将其更改为rvm1-capistrano3 应该会有所帮助。
  • 我必须将我的 VPS 上的内存提高到 1G 才能编译资产。
  • 值得一试吗? with rails_env: :production do

标签: ruby-on-rails ruby-on-rails-4 capistrano3 rvm-capistrano sshkit


【解决方案1】:

我在 DigitalOcean 上的 VPN 中处理了同样的问题,我必须创建交换内存。我的 VPS 正在杀死资产预编译过程。

在创建交换内存之前,您可以使用htop 检查您的服务器是否正在使用一些交换内存。我的服务器不是...

试试这个:

  • 创建 1GB 交换内存 sudo dd if=/dev/zero of=/usr/mem.swap bs=1M count=512

  • 使用第一步创建的交换内存 sudo mkswap /usr/mem.swap sudo swapon /usr/mem.swap

【讨论】:

  • 这很有帮助,我今天看到了这个答案,你能解释一下原因吗?和
  • 嗨!一些 VPN 主机没有启用交换内存......不幸的是我不知道为什么。 =/
  • 对我来说交换太小了
  • 谢谢你 Sagar Ranglani =D
猜你喜欢
  • 2013-09-05
  • 2012-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-28
  • 1970-01-01
相关资源
最近更新 更多