卡皮斯特拉诺,铁路"gem is not loaded. Add `gem 'sqlite3'` to your Gemfile"



首先,我是Rails和Capistrano的初学者。我的开发环境工作起来没有任何问题,我想首先在本地虚拟机上使用与生产服务器相同的设置作为测试环境。

我选择了Capistrano来处理部署,并根据官方网站的教程设置一切。

规格为:

  • 乌班图
  • ruby-2.0.0-p247
  • 轨道4.1.0.beta1
  • capistrano 3
  • phusion乘客

我的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

deploy/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

我的数据库.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,我都会遇到同样的错误。。。我完全迷失了方向,一直在网上搜索,做了多次测试,但都没有结果。

很明显,我在必要时在开发计算机上运行了"bundle update"one_answers"bundle install"。但我认为所有这些命令都是由Capistrano在部署时自动运行的。

因此,如果一个善良的灵魂能帮助我,这会让我非常高兴,我可能会停止脱发(或不脱发(:(

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

由于您在Gemfile中的位置,您的sqlite3 gem没有在生产中加载。将其从任何组中取出,或移动到group :test, :production组中。

由于版本不匹配,您的sqlite3-gem没有在生产中加载。因此,将gemfile更新为gem 'sqlite3', '~> 1.3.13'它会起作用的。把它放在group :production, :test下,当你把代码推送到heroku时会很好。

最新更新