Capistrano,Rails" gem未加载。将`gem' sqlite3'`添加到你的Gemfile"

时间:2014-03-19 15:00:49

标签: ruby-on-rails deployment capistrano

首先,我是Rails和Capistrano的初学者。 我的开发环境没有任何问题,我想首先在本地虚拟机上推送一个与我的生产服务器具有相同设置的测试环境。

我选择Capistrano来处理部署并根据官方网站的教程设置所有内容。

规格如下:

  • ubuntu的
  • 红宝石2.0.0-P247
  • rails 4.1.0.beta1
  • capistrano 3
  • phusion passenger

我的Gemfile:

gem 'rails', '4.1.0.beta1'
gem 'rails-i18n', '~> 4.0.0'

group :assets do
  # Use SCSS for stylesheets
  gem 'sass-rails', '4.0.2'

  gem 'uglifier', '>= 1.3.0'
end

gem 'bourbon'
gem 'foundation-rails'

group :development do

  gem 'capistrano', '~> 3.0.1'
  gem 'net-ssh', '~> 2.7.0'
  gem 'capistrano-rails', '~> 1.1.0'
  gem 'capistrano-bundler'
  gem 'capistrano-rvm'
  gem 'capistrano-rbenv', "~> 2.0"
end

group :development, :test do
  gem 'sqlite3'
  gem 'rspec-rails'
end

group :test, :production do
#  gem 'mysql2'
end

gem 'jquery-rails'

我的deploy.rb文件:

set :application, 'appliname'
set :deploy_user, 'deploy'
set :use_sudo,    false
set :repo_url, 'git@server:path/to/project.git'
set :branch, "master"

set :scm, :git

# set :format, :pretty
# set :log_level, :debug
set :pty, true

# setup rvm.
set :rbenv_type, :system
set :rbenv_ruby, 'ruby-2.0.0-p247'
set :rbenv_prefix, "RBENV_ROOT=#{fetch(:rbenv_path)} RBENV_VERSION=#{fetch(:rbenv_ruby)} #{fetch(:rbenv_path)}/bin/rbenv exec"
set :rbenv_map_bins, %w{rake gem bundle ruby rails}

# files we want symlinking to specific entries in shared.
set :linked_files, %w{config/database.yml config/private_env.yml}

# dirs we want symlinking to shared
set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system}

# set :default_env, { path: "/opt/ruby/bin:$PATH" }
set :keep_releases, 5

namespace :deploy do

  # make sure we're deploying what we think we're deploying
  # only allow a deploy with passing tests to deployed
  # before :deploy, "deploy:run_tests"

  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 :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

  # compile assets locally then rsync
  # after 'deploy:symlink:shared', 'deploy:compile_assets'
  # after :finishing, 'deploy:cleanup'

end

部署/ test.rb

set :stage, :test

server 'testserver.local', user: fetch(:deploy_user), roles: %w{web app db}
set :deploy_to, '/home/project/public'
set :enable_ssl, false

我的database.yml 起初我甚至想在我的测试环境中使用MySql,但是为了部署调试,我暂时放了sqlite。

default: &default
  adapter: sqlite3
  pool: 5
  timeout: 5000

development:
  <<: *default
  database: db/development.sqlite3

test: &test
  <<: *default
  database: db/test.sqlite3
#  adapter: mysql2
#  encoding: utf8
#  reconnect: true
#  database: ENV['database']
#  pool: 5
#  username: ENV['username']
#  password: ENV['password']
#  host: localhost

production:
  <<: *test

最后运行以下deply命令后出现错误消息:

cap test deploy

错误:

DEBUG [f012bc9e] Command: cd /home/project/public/releases/20140319125218 && ( RAILS_ENV=test bundle exec rake assets:precompile )
DEBUG [f012bc9e]    rake aborted!
DEBUG [f012bc9e]
DEBUG [f012bc9e]    Specified 'sqlite3' for database adapter, but the gem is not loaded. Add `gem 'sqlite3'` to your Gemfile (and ensure its version is at the minimum required by ActiveRecord).
DEBUG [f012bc9e]
DEBUG [f012bc9e]    /home/project/public/shared/bundle/ruby/2.0.0/gems/activerecord-4.1.0.beta1/lib/active_record/connection_adapters/connection_specification.rb:58:in `rescue in resolve_hash_connection'
DEBUG [f012bc9e]
DEBUG [f012bc9e]    /home/project/public/shared/bundle/ruby/2.0.0/gems/activerecord-4.1.0.beta1/lib/active_record/connection_adapters/connection_specification.rb:55:in `resolve_hash_connection'
DEBUG [f012bc9e]
DEBUG [f012bc9e]    /home/project/public/shared/bundle/ruby/2.0.0/gems/activerecord-4.1.0.beta1/lib/active_record/connection_adapters/connection_specification.rb:46:in `resolve_string_connection'
DEBUG [f012bc9e]
DEBUG [f012bc9e]    /home/project/public/shared/bundle/ruby/2.0.0/gems/activerecord-4.1.0.beta1/lib/active_record/connection_adapters/connection_specification.rb:30:in `spec'
DEBUG [f012bc9e]
DEBUG [f012bc9e]    /home/project/public/shared/bundle/ruby/2.0.0/gems/activerecord-4.1.0.beta1/lib/active_record/connection_handling.rb:39:in `establish_connection'
DEBUG [f012bc9e]
DEBUG [f012bc9e]    /home/project/public/shared/bundle/ruby/2.0.0/gems/activerecord-4.1.0.beta1/lib/active_record/railtie.rb:126:in `block (2 levels) in <class:Railtie>'
DEBUG [f012bc9e]
DEBUG [f012bc9e]    /home/project/public/shared/bundle/ruby/2.0.0/gems/activesupport-4.1.0.beta1/lib/active_support/lazy_load_hooks.rb:38:in `instance_eval'
DEBUG [f012bc9e]
DEBUG [f012bc9e]    /home/project/public/shared/bundle/ruby/2.0.0/gems/activesupport-4.1.0.beta1/lib/active_support/lazy_load_hooks.rb:38:in `execute_hook'
DEBUG [f012bc9e]
DEBUG [f012bc9e]    /home/project/public/shared/bundle/ruby/2.0.0/gems/activesupport-4.1.0.beta1/lib/active_support/lazy_load_hooks.rb:28:in `block in on_load'
DEBUG [f012bc9e]
DEBUG [f012bc9e]    /home/project/public/shared/bundle/ruby/2.0.0/gems/activesupport-4.1.0.beta1/lib/active_support/lazy_load_hooks.rb:27:in `each'
DEBUG [f012bc9e]
DEBUG [f012bc9e]    /home/project/public/shared/bundle/ruby/2.0.0/gems/activesupport-4.1.0.beta1/lib/active_support/lazy_load_hooks.rb:27:in `on_load'
DEBUG [f012bc9e]
DEBUG [f012bc9e]    /home/project/public/shared/bundle/ruby/2.0.0/gems/activerecord-4.1.0.beta1/lib/active_record/railtie.rb:124:in `block in <class:Railtie>'
DEBUG [f012bc9e]
DEBUG [f012bc9e]    /home/project/public/shared/bundle/ruby/2.0.0/gems/railties-4.1.0.beta1/lib/rails/initializable.rb:30:in `instance_exec'
DEBUG [f012bc9e]
DEBUG [f012bc9e]    /home/project/public/shared/bundle/ruby/2.0.0/gems/railties-4.1.0.beta1/lib/rails/initializable.rb:30:in `run'
DEBUG [f012bc9e]
DEBUG [f012bc9e]    /home/project/public/shared/bundle/
DEBUG [f012bc9e]    ruby/2.0.0/gems/railties-4.1.0.beta1/lib/rails/initializable.rb:55:in `block in run_initializers'
DEBUG [f012bc9e]
DEBUG [f012bc9e]    /home/project/public/shared/bundle/ruby/2.0.0/gems/railties-4.1.0.beta1/lib/rails/initializable.rb:54:in `run_initializers'
DEBUG [f012bc9e]
DEBUG [f012bc9e]    /home/project/public/shared/bundle/ruby/2.0.0/gems/railties-4.1.0.beta1/lib/rails/application.rb:285:in `initialize!'
DEBUG [f012bc9e]
DEBUG [f012bc9e]    /home/project/public/releases/20140319125218/config/environment.rb:8:in `<top (required)>'
DEBUG [f012bc9e]
DEBUG [f012bc9e]    /home/project/public/shared/bundle/ruby/2.0.0/gems/activesupport-4.1.0.beta1/lib/active_support/dependencies.rb:247:in `require'
DEBUG [f012bc9e]    /home/project/public/shared/bundle/ruby/2.0.0/gems/activesupport-4.1.0.beta1/lib/active_support/dependencies.rb:247:in `block in require'
DEBUG [f012bc9e]    /home/project/public/shared/bundle/ruby/2.0.0/gems/activesupport-4.1.0.beta1/lib/active_support/dependencies.rb:232:in `load_dependency'
DEBUG [f012bc9e]    /home/project/public/shared/bundle/ruby/2.0.0/gems/activesupport-4.1.0.beta1/lib/active_support/dependencies.rb:247:in `require'
DEBUG [f012bc9e]    /home/project/public/shared/bundle/ruby/2.0.0/gems/railties-4.1.0.beta1/lib/rails/application.rb:261:in `require_environment!'
DEBUG [f012bc9e]    /home/project/public/shared/bundle/ruby/2.0.0/gems/railties-4.1.0.beta1/lib/rails/application.rb:344:in `block in run_tasks_blocks'
DEBUG [f012bc9e]    /home/project/public/shared/bundle/ruby/2.0.0/gems/sprockets-rails-2.0.1/lib/sprockets/rails/task.rb:54:in `block (2 levels) in define'
DEBUG [f012bc9e]    Tasks: TOP => environment
DEBUG [f012bc9e]
DEBUG [f012bc9e]    (See full trace by running task with --trace)
DEBUG [f012bc9e]
cap aborted!
rake stdout: Nothing written
rake stderr: Nothing written
/Users/username/.rvm/gems/ruby-2.0.0-p247/gems/sshkit-1.3.0/lib/sshkit/command.rb:94:in `exit_status='
/Users/username/.rvm/gems/ruby-2.0.0-p247/gems/sshkit-1.3.0/lib/sshkit/backends/netssh.rb:142:in `block (4 levels) in _execute'
/Users/username/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.8.0/lib/net/ssh/connection/channel.rb:551:in `call'
/Users/username/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.8.0/lib/net/ssh/connection/channel.rb:551:in `do_request'
/Users/username/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.8.0/lib/net/ssh/connection/session.rb:561:in `channel_request'
/Users/username/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.8.0/lib/net/ssh/connection/session.rb:465:in `dispatch_incoming_packets'
/Users/username/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.8.0/lib/net/ssh/connection/session.rb:221:in `preprocess'
/Users/username/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.8.0/lib/net/ssh/connection/session.rb:205:in `process'
/Users/username/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.8.0/lib/net/ssh/connection/session.rb:169:in `block in loop'
/Users/username/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.8.0/lib/net/ssh/connection/session.rb:169:in `loop'
/Users/username/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.8.0/lib/net/ssh/connection/session.rb:169:in `loop'
/Users/username/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.8.0/lib/net/ssh/connection/channel.rb:269:in `wait'
/Users/username/.rvm/gems/ruby-2.0.0-p247/gems/sshkit-1.3.0/lib/sshkit/backends/netssh.rb:164:in `block (2 levels) in _execute'
/Users/username/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.8.0/lib/net/ssh/connection/channel.rb:514:in `call'
/Users/username/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.8.0/lib/net/ssh/connection/channel.rb:514:in `do_open_confirmation'
/Users/username/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.8.0/lib/net/ssh/connection/session.rb:545:in `channel_open_confirmation'
/Users/username/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.8.0/lib/net/ssh/connection/session.rb:465:in `dispatch_incoming_packets'
/Users/username/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.8.0/lib/net/ssh/connection/session.rb:221:in `preprocess'
/Users/username/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.8.0/lib/net/ssh/connection/session.rb:205:in `process'
/Users/username/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.8.0/lib/net/ssh/connection/session.rb:169:in `block in loop'
/Users/username/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.8.0/lib/net/ssh/connection/session.rb:169:in `loop'
/Users/username/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.8.0/lib/net/ssh/connection/session.rb:169:in `loop'
/Users/username/.rvm/gems/ruby-2.0.0-p247/gems/sshkit-1.3.0/lib/sshkit/backends/netssh.rb:166:in `block in _execute'
/Users/username/.rvm/gems/ruby-2.0.0-p247/gems/sshkit-1.3.0/lib/sshkit/backends/netssh.rb:123:in `tap'
/Users/username/.rvm/gems/ruby-2.0.0-p247/gems/sshkit-1.3.0/lib/sshkit/backends/netssh.rb:123:in `_execute'
/Users/username/.rvm/gems/ruby-2.0.0-p247/gems/sshkit-1.3.0/lib/sshkit/backends/netssh.rb:66:in `execute'
/Users/username/.rvm/gems/ruby-2.0.0-p247/gems/capistrano-rails-1.1.1/lib/capistrano/tasks/assets.rake:59:in `block (6 levels) in <top (required)>'
/Users/username/.rvm/gems/ruby-2.0.0-p247/gems/sshkit-1.3.0/lib/sshkit/backends/abstract.rb:89:in `with'
/Users/username/.rvm/gems/ruby-2.0.0-p247/gems/capistrano-rails-1.1.1/lib/capistrano/tasks/assets.rake:58:in `block (5 levels) in <top (required)>'
/Users/username/.rvm/gems/ruby-2.0.0-p247/gems/sshkit-1.3.0/lib/sshkit/backends/abstract.rb:81:in `within'
/Users/username/.rvm/gems/ruby-2.0.0-p247/gems/capistrano-rails-1.1.1/lib/capistrano/tasks/assets.rake:57:in `block (4 levels) in <top (required)>'
/Users/username/.rvm/gems/ruby-2.0.0-p247/gems/sshkit-1.3.0/lib/sshkit/backends/netssh.rb:54:in `instance_exec'
/Users/username/.rvm/gems/ruby-2.0.0-p247/gems/sshkit-1.3.0/lib/sshkit/backends/netssh.rb:54:in `run'
/Users/username/.rvm/gems/ruby-2.0.0-p247/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

所以基本上,使用MySql2 gem或sqlite gem,我有同样的错误...... 我完全迷失了,一直在网上看,并做了多次测试但没有用。

显然我已经在开发计算机上运行了捆绑更新&#39;和&#39;捆绑安装&#39;必要时。 但我想所有这些命令都是由Capistrano在部署时自动运行的。

所以,如果一个好心灵可以帮助这个,那会让我很开心,我可能会不再失去我的头发(或不):)

如果需要更多信息,请询问! 谢谢

2 个答案:

答案 0 :(得分:1)

您的sqlite3 gem未在生产中加载,因为您在Gemfile中已将其加载。将其从任何群组中删除,或将其移至group :test, :production群组。

答案 1 :(得分:1)

由于版本不匹配,您的sqlite3 gem没有在生产中加载。 因此,将您的gemfile更新为gem 'sqlite3', '~> 1.3.13' 会的。 将其保留在group :production, :test下,将代码推送到heroku会很好。