我已经尝试了几种使用Capistrano v3部署到我的服务器的方法,但它失败并出现以下错误; 我已尝试在本地进行预编译,但失败了。
DEBUG [4ec78ee3] Command: cd /var/www/html/webapp/releases/20140101221937 && bundle exec rake assets:precompile RAILS_ENV=production
DEBUG [4ec78ee3] /usr/local/bin/ruby /var/www/html/webapp/shared/bundle/ruby/1.9.1/bin/rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets
DEBUG [4ec78ee3] rake aborted!
DEBUG [4ec78ee3] undefined method `fetch' for false:FalseClass
我的部署文件如下所示;
SSHKit.config.command_map[:rake] = "bundle exec rake"
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 :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
这是一个详细的痕迹;
INFO [4ec78ee3] Running bundle exec rake assets:precompile RAILS_ENV=production on 208.68.39.56
DEBUG [4ec78ee3] Command: cd /var/www/html/webapp/releases/20140101221937 && bundle exec rake assets:precompile RAILS_ENV=production
DEBUG [4ec78ee3] /usr/local/bin/ruby /var/www/html/webapp/shared/bundle/ruby/1.9.1/bin/rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets
DEBUG [4ec78ee3] rake aborted!
DEBUG [4ec78ee3] undefined method `fetch' for false:FalseClass
DEBUG [4ec78ee3] /var/www/html/webapp/shared/bundle/ruby/1.9.1/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract/connection_specification.rb:35:in `resolve_string_connection'
DEBUG [4ec78ee3] /var/www/html/webapp/shared/bundle/ruby/1.9.1/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract/connection_specification.rb:25:in `spec'
DEBUG [4ec78ee3] /var/www/html/webapp/shared/bundle/ruby/1.9.1/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract/connection_specification.rb:130:in `establish_connection'
DEBUG [4ec78ee3] /var/www/html/webapp/shared/bundle/ruby/1.9.1/gems/activerecord-3.2.13/lib/active_record/railtie.rb:82:in `block (2 levels) in <class:Railtie>'
DEBUG [4ec78ee3] /var/www/html/webapp/shared/bundle/ruby/1.9.1/gems/activesupport-3.2.13/lib/active_support/lazy_load_hooks.rb:36:in `instance_eval'
DEBUG [4ec78ee3] /var/www/html/webapp/shared/bundle/ruby/1.9.1/gems/activesupport-3.2.13/lib/active_support/lazy_load_hooks.rb:36:in `execute_hook'
DEBUG [4ec78ee3] /var/www/html/webapp/shared/bundle/ruby/1.9.1/gems/activesupport-3.2.13/lib/active_support/lazy_load_hooks.rb:26:in `block in on_load'
DEBUG [4ec78ee3] /var/www/html/webapp/shared/bundle/ruby/1.9.1/gems/activesupport-3.2.13/lib/active_support/lazy_load_hooks.rb:25:in `each'
DEBUG [4ec78ee3] /var/www/html/webapp/shared/bundle/ruby/1.9.1/gems/activesupport-3.2.13/lib/active_support/lazy_load_hooks.rb:25:in `on_load'
DEBUG [4ec78ee3] /var/www/html/webapp/shared/bundle/ruby/1.9.1/gems/activerecord-3.2.13/lib/active_record/railtie.rb:74:in `block in <class:Railtie>'
DEBUG [4ec78ee3] /var/www/html/webapp/shared/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/initializable.rb:30:in `instance_exec'
DEBUG [4ec78ee3] /var/www/html/webapp/shared/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/initializable.rb:30:in `run'
DEBUG [4ec78ee3] /var/www/html/webapp/shared/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/initializable.rb:55:in `block in run_initializers'
DEBUG [4ec78ee3] /var/www/html/webapp/shared/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/initializable.rb:54:in `each'
DEBUG [4ec78ee3] /var/www/html/webapp/shared/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/initializable.rb:54:in `run_initializers'
DEBUG [4ec78ee3] /var/www/html/webapp/shared/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/application.rb:136:in `initialize!'
DEBUG [4ec78ee3] /var/www/html/webapp/shared/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/railtie/configurable.rb:30:in `method_missing'
DEBUG [4ec78ee3] /var/www/html/webapp/releases/20140101221937/config/environment.rb:5:in `<top (required)>'
DEBUG [4ec78ee3] /var/www/html/webapp/shared/bundle/ruby/1.9.1/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:251:in `require'
DEBUG [4ec78ee3] /var/www/html/webapp/shared/bundle/ruby/1.9.1/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:251:in `block in require'
DEBUG [4ec78ee3] /var/www/html/webapp/shared/bundle/ruby/1.9.1/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:236:in `load_dependency'
DEBUG [4ec78ee3] /var/www/html/webapp/shared/bundle/ruby/1.9.1/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:251:in `require'
DEBUG [4ec78ee3] /var/www/html/webapp/shared/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/application.rb:103:in `require_environment!'
DEBUG [4ec78ee3] /var/www/html/webapp/shared/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/application.rb:297:in `block (2 levels) in initialize_tasks'
DEBUG [4ec78ee3] /var/www/html/webapp/shared/bundle/ruby/1.9.1/gems/actionpack-3.2.13/lib/sprockets/assets.rake:93:in `block (2 levels) in <top (required)>'
DEBUG [4ec78ee3] /var/www/html/webapp/shared/bundle/ruby/1.9.1/gems/actionpack-3.2.13/lib/sprockets/assets.rake:60:in `block (3 levels) in <top (required)>'
DEBUG [4ec78ee3] Tasks: TOP => environment
DEBUG [4ec78ee3] (See full trace by running task with --trace)
DEBUG [4ec78ee3] rake aborted!
DEBUG [4ec78ee3] Command failed with status (1): [/usr/local/bin/ruby /var/www/html/webapp/s...]
DEBUG [4ec78ee3] /var/www/html/webapp/shared/bundle/ruby/1.9.1/gems/actionpack-3.2.13/lib/sprockets/assets.rake:12:in `ruby_rake_task'
DEBUG [4ec78ee3] /var/www/html/webapp/shared/bundle/ruby/1.9.1/gems/actionpack-3.2.13/lib/sprockets/assets.rake:21:in `invoke_or_reboot_rake_task'
DEBUG [4ec78ee3] /var/www/html/webapp/shared/bundle/ruby/1.9.1/gems/actionpack-3.2.13/lib/sprockets/assets.rake:29:in `block (2 levels) in <top (required)>'
DEBUG [4ec78ee3] Tasks: TOP => assets:precompile
DEBUG [4ec78ee3] (See full trace by running task with --trace)
我已经cap production deploy:compile_assets
得到了这个; 上限已中止!
if test ! -d /var/www/html/webapp/current; then echo "Directory does not exist '/var/www/html/webapp/current'" 1>&2; false; fi stdout: Nothing written
if test ! -d /var/www/html/webapp/current; then echo "Directory does not exist '/var/www/html/webapp/current'" 1>&2; false; fi stderr: Nothing written
请记住,它仍然是一个空文件。
答案 0 :(得分:0)
这不是一个完整的答案,但却是故障排除的第一步。
首先,转到服务器并运行与Capistrano运行完全相同的命令,以确保您可以重现完全相同的错误。这使Capistrano脱离了图片,现在这个bug就变成了Rails和你的配置。
以下是引发错误的行:
错误消息告诉我们configurations
为false,但代码期望它是响应fetch
的某个对象(可能是哈希)。问题是此@configurations
中的ActiveRecord::Base::ConnectionSpecification::Resolver
实例变量被错误地设置为false
。你知道为什么会这样吗?我会检查所有与数据库连接有关的配置文件,并确保它们看起来没问题。
如果这没有帮助,下一步就是找出为什么该变量设置为false
。好吧,如果我们在堆栈跟踪中看到两行较低,我们可以看到如何创建和使用此Resolver对象:
该方法只是调用ActiveRecord::Base.configurations
并将其传递给Resolver对象。那么现在的问题是ActiveRecord::Base.configurations
如何设置为假?
修改1:
以下是ActiveRecord::Base.configurations
的文档和代码:
https://github.com/rails/rails/blob/v3.2.13/activerecord/lib/active_record/base.rb#L341-369
听起来ActiveRecord::Base.configurations
应该来自您的database.yml文件。你应该去你的服务器,仔细查看你的database.yml文件,看看它是否可能以某种方式被读作false。你应该在这里发布该文件。