2012-06-14 118 views
1

我试图部署到Ryan Bates截屏视频后的VPS。Capistrano抱怨资产预编译时缺少'eventmachine'

我用细如Web服务器而不是独角兽和它给我头疼的负荷...... 当试图编译服务器上的资产,它给了我这样的:

triggering after callbacks for `deploy:update_code' 
* executing `deploy:assets:precompile' 
* executing "cd /home/deployer/apps/my-app/releases/20120614062157 && b 
undle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile" 
servers: ["**.**.**.**"] 
[xx.xx.xx.xx] executing command 
** [out :: **.**.**.**] rake aborted! 
** [out :: **.**.**.**] cannot load such file -- eventmachine 
** [out :: **.**.**.**] 
** [out :: **.**.**.**] (See full trace by running task with --trace) 
command finished in 3891ms 
*** [deploy:update_code] rolling back 
* executing "rm -rf /home/deployer/apps/my-app/releases/20120614062157; 
true" 
servers: ["**.**.**.**"] 
[**.**.**.**] executing command 

我不能检查如果eventmachine安装在捆绑包中,因为capistrano总是将所有内容都回滚,所以我实际上并没有在脚本之后安装应用程序..这使得几乎不可能追溯到更远......

所以我完全失去了。谷歌搜索“耙资产:预编译eventmachine”不返回任何相关的..

谢谢你的帮助。

亲切的问候 斯特凡诺

我的Gemfile:

source 'http://rubygems.org' 

gem 'rails', '3.2.2' 

# Bundle edge Rails instead: 
# gem 'rails', :git => 'git://github.com/rails/rails.git' 

# gem 'sqlite3' 
gem 'pg' 
gem 'bootstrap-sass-rails' 

group :development do 
    # To generate the class diagrams. 
    gem 'annotate', :git => 'git://github.com/jeremyolliver/annotate_models.git', :branch => 'rake_compatibility' 
end 

group :test do 
    gem 'rspec-rails' 
    gem 'capybara' 
    gem 'spork', '0.9.0' 
    gem 'factory_girl_rails' 
    gem 'guard-spork', '0.3.2' 
end 

# Gems used only for assets and not required 
# in production environments by default. 
group :assets do 
    gem 'sass-rails', '~> 3.2.3' 
    gem 'coffee-rails', '~> 3.2.1' 

    # See https://github.com/sstephenson/execjs#readme for more supported runtimes 
    # gem 'therubyracer' 

    gem 'uglifier', '>= 1.0.3' 
end 

gem 'jquery-rails' 

#To use ActiveModel has_secure_password 
gem 'bcrypt-ruby', '~> 3.0.0' 

# Form helpers 
gem 'simple_form' 
gem 'country_select' 

# RMagick 
gem 'mini_magick' 

# Active merchant 
gem 'activemerchant', :require => 'active_merchant' 

# To validate IBAN numbers 
gem 'iban-tools' 

# For the google maps stuff 
gem 'gmaps4rails' 

# To generate PDFs 
gem 'prawn', '1.0.0.rc1' 

# HAML test 
gem 'haml' 
gem 'haml-rails' 

# For HTML emails 
gem 'roadie' 

# To use Jbuilder templates for JSON 
# gem 'jbuilder' 

# Use unicorn as the app server 
# gem 'unicorn' 

# gem "thin", "1.3.1" 
# gem "unicorn" 

# Deploy with Capistrano 
gem 'capistrano' 

platform :ruby do 
    gem "unicorn" 
end 

# To use debugger 
# gem 'ruby-debug19', :require => 'ruby-debug' 

正如你看到的我swaped薄的麒麟......我想我也把范围缩小到Capistrano的实际上从未叫包安装?因为现在它抱怨没有找到nokogiri。

我设法找到capistrano存储在共享/缓存复制目录下的服务器上的实际版本,并且捆绑安装在那里工作得很好!

是的'用导轨部署很容易!'容易浪费整整一个星期就可以了..

捆绑安装的作品,如果我做捆绑高管帽部署:

triggering after callbacks for `deploy:finalize_update' 
    * executing `bundle:install' 
    * executing "ls -x /home/deployer/apps/hemd-mit-stil/releases" 
    servers: ["xx.xx.xx.xx"] 
    [xx.xx.xx.xx] executing command 
    command finished in 1453ms 
    * executing "cd /home/deployer/apps/hemd-mit-stil/releases/20120615043946 && b 
undle install --gemfile /home/deployer/apps/hemd-mit-stil/releases/2012061504394 
6/Gemfile --path /home/deployer/apps/hemd-mit-stil/shared/bundle --deployment -- 
quiet --without development test" 
    servers: ["xx.xx.xx.xx"] 
    [xx.xx.xx.xx] executing command 
    command finished in 29813ms 
    * executing `deploy:symlink_config' 
    * executing "ln -nfs /home/deployer/apps/hemd-mit-stil/shared/config/database. 
yml /home/deployer/apps/hemd-mit-stil/releases/20120615043946/config/database.ym 
l" 
    servers: ["xx.xx.xx.xx"] 
    [xx.xx.xx.xx] executing command 
    command finished in 1484ms 
    triggering after callbacks for `deploy:update_code' 
    * executing `deploy:assets:precompile' 
    * executing "cd /home/deployer/apps/hemd-mit-stil/releases/20120615043946 && b 
undle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile" 
    servers: ["xx.xx.xx.xx"] 
    [xx.xx.xx.xx] executing command 
** [out :: xx.xx.xx.xx] rake aborted! 
** [out :: xx.xx.xx.xx] cannot load such file -- nokogiri 
** [out :: xx.xx.xx.xx] 
** [out :: xx.xx.xx.xx] (See full trace by running task with --trace) 
    command finished in 3563ms 
*** [deploy:update_code] rolling back 
    * executing "rm -rf /home/deployer/apps/hemd-mit-stil/releases/20120615043946; 
true" 
    servers: ["xx.xx.xx.xx"] 
    [xx.xx.xx.xx] executing command 
    command finished in 1453ms 
failed: "sh -c 'cd /home/deployer/apps/hemd-mit-stil/releases/20120615043946 && 
bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile'" on 
xx.xx.xx.xx 

我deploy.rb文件(从railscasts基本上直副本)

require "bundler/capistrano" 

server "xx.xx.xx.xx", :web, :app, :db, primary: true 

set :application, "hemd-mit-stil" 
set :user, "deployer" 
set :deploy_to, "/home/#{user}/apps/#{application}" 
set :deploy_via, :remote_cache 
set :use_sudo, false 

set :scm, "git" 
set :repository, "[email protected]:Stefano1990/#{application}.git" 
set :branch, "master" 

default_run_options[:pty] = true 
ssh_options[:forward_agent] = true 
ssh_options[:paranoid] = 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.example.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 
+0

你能运行rake RAILS_ENV =生产RAILS_GROUPS =资产在本地? –

+0

是的,在当地它工作得很好。与此同时,我试图在服务器上手动克隆git存储库,然后编译资产并且工作得很好。 – KimJongIl

+0

这听起来像是某种薄弱的问题(因为薄弱的在幕后使用EM)。我之前没有遇到过这个问题,所以我没有答案,对不起。 – Andrew

回答

2

我居然发现了问题...

如果你把你Gemfile.lock的在你的仓库(推荐),你产生Gemfile.lock的Windows机器上你基本上拧紧。

一个从Windows机器Gemfile.lock的会做到这一点:

bcrypt-ruby (3.0.1-x86-mingw32) 

而且在生产环境(Linux版),这将静默失败。

“解决方案”: 不要在您的版本控制中检查Gemfile.lock。这可能会在稍后重新部署时导致问题,并且您的应用程序决定更新它的宝石,因为它会生成Gemfile.lock本身。

的 “真正解”: 不要工作在Windows上。

从您的资料库中删除您Gemfile.lock的事:

git rm Gemfile.lock 
+0

@KimJongII,我非常爱你。在这一点上,现在结束了5小时在iterwebs上寻找解决此问题的解决方案。 您仍可以检查您的Gemfile.lock的文件到你的资料库,但我没有犯以前以下... 在Gemfile.lock的 替换:bcrypt - 红宝石(3.0.1 86的mingw32) 带:bcrypt -ruby(3.0.1) 这非常冒险,每次运行软件包更新时我都需要这样做,但我现在不在意,而且我是一个快乐的人。你不喜欢这在将近2年后仍然是个问题吗? – Venice

+0

我不会评论bundler的做法。我向捆绑商提出了这个问题,但他们不认为它是一个问题... – KimJongIl

0

你不需要cap deploy:cold,但你需要确保你的capistrano脚本知道bundle install。所有你需要做的是require 'bundler/capistrano'。这应有助于:http://gembundler.com/deploying.html

+0

我很害怕仍然无法正常工作..我完全重新安装了VPS,但它又一次陷入了同样的一步。输出附加到我的问题。 – KimJongIl

+0

你可以发布你的deploy.rb文件吗?我认为问题出在 – Andrew

+0

已经完成,看到我的问题。 – KimJongIl