【问题标题】:Capistrano, Rails "gem is not loaded. Add `gem 'sqlite3'` to your Gemfile"Capistrano,Rails “未加载宝石。将 `gem 'sqlite3'` 添加到您的 Gemfile”
【发布时间】:2014-04-25 22:25:55
【问题描述】:

首先,我是 Rails 和 Capistrano 的初学者。 我的开发环境可以正常工作,我想首先在本地虚拟机上作为测试环境推送,并且设置与我的生产服务器相同。

我选择Capistrano按照官网教程进行部署和设置。

规格如下:

  • ubuntu
  • ruby-2.0.0-p247
  • 导轨 4.1.0.beta1
  • capistrano 3
  • phusion 乘客

我的宝石文件:

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

我的数据库.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,我都会遇到同样的错误...... 我完全迷失了,一直在浏览网络并进行了多次测试,但无济于事。

显然,我在开发计算机上运行了“捆绑更新”和“捆绑安装”(必要时)。 但我想所有这些命令都是 Capistrano 在部署时自动运行的。

因此,如果一个好人可以帮助解决这个问题,那会让我非常高兴,并且我可能会停止掉头发(或不掉头发):)

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

【问题讨论】:

  • 警告:你有 rvm 和 rbenv 的 gem。这两个 Ruby 环境管理系统不能很好地配合使用。
  • 我不知道,我想我会删除 rbenv 以便在我的环境中保持一致。谢谢
  • 当然。如果您还没有对两者进行比较,请花几分钟时间看看您喜欢哪一个。
  • 我推荐 rbenv,因为它只专注于 ruby​​,并且在与你的 gem 的 bundler 搭配使用时效果很好。
  • 谢谢,我会更深入地研究这个!

标签: ruby-on-rails deployment capistrano


【解决方案1】:

您的sqlite3 gem 没有在生产中加载,因为您在 Gemfile 中的位置获得了它。将其从任何组中取出,或将其移至group :test, :production 组。

【讨论】:

  • 谢谢,它确实有效,但我有点困惑。到目前为止,在“组:开发,:测试”中应该是正确的,因为我正在推动:测试环境......为什么这是错误的?
  • 因为capistrano部署的时候,会在生产环境下做一个bundle install。由于sqlite3 gem 仅在 :development 和 :test 组中,因此捆绑程序没有安装它。因此,当需要 gem 时,部署失败。
  • 我明白,但我目前正在推进 :test 环境。 :test 失败了。我还没有在生产环境中推送。 :)
【解决方案2】:

由于版本不匹配,您的 sqlite3 gem 未在生产中加载。 所以,将你的 gemfile 更新为gem 'sqlite3', '~&gt; 1.3.13' 它会工作的。 把它放在group :production, :test 下,当你将代码推送到heroku 时会很好。

【讨论】:

    猜你喜欢
    • 2023-03-07
    • 2015-05-07
    • 2019-09-18
    • 2013-10-16
    • 1970-01-01
    • 2020-07-08
    • 2015-11-19
    • 2019-06-29
    • 2016-01-10
    相关资源
    最近更新 更多