ruby-on-rails - Rails 3.1 和 Assets 管道 : Trouble on deploying with Capistrano

标签 ruby-on-rails ruby-on-rails-3 deployment capistrano asset-pipeline

我刚刚从 Ruby on Rails 3.0.10 切换到 3.1.0,我想使用 Capistrano gem 部署我的 Assets 文件(我的本地机器是运行 Snow Leopard 的 MacO,我的远程机器运行的是 Ubuntu 10.04 Lucid)。所以,正如 Official Guide 中所写, 我取消注释 load 'deploy/assets'在我的 Capfile像这样:

# Uncomment if you are using Rails' asset pipeline
load 'deploy/assets'

现在,当我运行 cap deploy命令我收到以下错误(错误在底部解释):
...

  * executing "cd /<application_absolute_path>/releases/20110925223032 && rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile"
    servers: ["<my_web_site_ip>"]
    [<my_web_site_ip>] executing command
 ** [out :: <my_web_site_ip>] (in /<application_absolute_path>/releases/20110925223032)
*** [err :: <my_web_site_ip>] rake aborted!
*** [err :: <my_web_site_ip>] uninitialized constant Rake::DSL
*** [err :: <my_web_site_ip>] /usr/local/lib/ruby/1.9.1/rake.rb:2482:in `const_missing'
*** [err :: <my_web_site_ip>] /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/tasklib.rb:8:in `<class:TaskLib>'
*** [err :: <my_web_site_ip>] /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/tasklib.rb:6:in `<module:Rake>'
*** [err :: <my_web_site_ip>] /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/tasklib.rb:3:in `<top (required)>'
*** [err :: <my_web_site_ip>] /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/testtask.rb:4:in `require'
*** [err :: <my_web_site_ip>] /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/testtask.rb:4:in `<top (required)>'
*** [err :: <my_web_site_ip>] /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.1.0/lib/rails/test_unit/testing.rake:2:in `require'
*** [err :: <my_web_site_ip>] /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.1.0/lib/rails/test_unit/testing.rake:2:in `<top (required)>'
*** [err :: <my_web_site_ip>] /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.1.0/lib/rails/test_unit/railtie.rb:12:in `load'
*** [err :: <my_web_site_ip>] /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.1.0/lib/rails/test_unit/railtie.rb:12:in `block in <class:TestUnitRailtie>'
*** [err :: <my_web_site_ip>] /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.1.0/lib/rails/railtie.rb:183:in `call'
*** [err :: <my_web_site_ip>] /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.1.0/lib/rails/railtie.rb:183:in `block in load_tasks'
*** [err :: <my_web_site_ip>] /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.1.0/lib/rails/railtie.rb:183:in `each'
*** [err :: <my_web_site_ip>] /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.1.0/lib/rails/railtie.rb:183:in `load_tasks'
*** [err :: <my_web_site_ip>] /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.1.0/lib/rails/engine.rb:395:in `block in load_tasks'
*** [err :: <my_web_site_ip>] /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.1.0/lib/rails/application/railties.rb:8:in `each'
*** [err :: <my_web_site_ip>] /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.1.0/lib/rails/application/railties.rb:8:in `all'
*** [err :: <my_web_site_ip>] /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.1.0/lib/rails/engine.rb:395:in `load_tasks'
*** [err :: <my_web_site_ip>] /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.1.0/lib/rails/application.rb:99:in `load_tasks'
*** [err :: <my_web_site_ip>] /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.1.0/lib/rails/railtie/configurable.rb:30:in `method_missing'
*** [err :: <my_web_site_ip>] /<application_absolute_path>/releases/20110925223032/Rakefile:7:in `<top (required)>'
*** [err :: <my_web_site_ip>] /usr/local/lib/ruby/1.9.1/rake.rb:2373:in `load'
*** [err :: <my_web_site_ip>] /usr/local/lib/ruby/1.9.1/rake.rb:2373:in `raw_load_rakefile'
*** [err :: <my_web_site_ip>] /usr/local/lib/ruby/1.9.1/rake.rb:2007:in `block in load_rakefile'
*** [err :: ] /usr/local/lib/ruby/1.9.1/rake.rb:2058:in `standard_exception_handling'
*** [err :: <my_web_site_ip>] /usr/local/lib/ruby/1.9.1/rake.rb:2006:in `load_rakefile'
*** [err :: <my_web_site_ip>] /usr/local/lib/ruby/1.9.1/rake.rb:1991:in `run'
*** [err :: <my_web_site_ip>] /usr/local/bin/rake:31:in `<main>'
    command finished in 4301ms
*** [deploy:update_code] rolling back
  * executing "rm -rf /<application_absolute_path>/releases/20110925223032; true"
    servers: ["<my_web_site_ip>"]
    [<my_web_site_ip>] executing command
    command finished in 377ms
failed: "sh -c 'cd /<application_absolute_path>/releases/20110925223032 && rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile'" on <my_web_site_ip>

因此,我尝试按照 this question 的回答解决问题。 :
# Rakefile
require 'rake/dsl_definition'

require File.expand_path('../config/application', __FILE__)

<MyApplicationName>::Application.load_tasks

我再次运行后cap deploy命令我收到以下错误:
...

  * executing "cd /<application_absolute_path>/releases/20110925160036 && rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile"
    servers: ["<my_web_site_ip>"]
    [<my_web_site_ip>] executing command
*** [err :: <my_web_site_ip>] /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/file_utils.rb:10: warning: already initialized constant RUBY
*** [err :: <my_web_site_ip>] /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/file_utils.rb:84: warning: already initialized constant LN_SUPPORTED
 ** [out :: <my_web_site_ip>] (in /<application_absolute_path>/releases/20110925160036)
*** [err :: <my_web_site_ip>] WARNING: Global access to Rake DSL methods is deprecated.  Please include
*** [err :: <my_web_site_ip>] ...  Rake::DSL into classes and modules which use the Rake DSL methods.
*** [err :: <my_web_site_ip>] WARNING: DSL method Object#mkdir_p called at /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/file_utils_ext.rb:36:in `mkdir_p'
*** [err :: <my_web_site_ip>] WARNING: Global access to Rake DSL methods is deprecated.  Please include
*** [err :: <my_web_site_ip>] ...  Rake::DSL into classes and modules which use the Rake DSL methods.
*** [err :: <my_web_site_ip>] WARNING: DSL method Object#mkdir_p called at /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/file_utils_ext.rb:36:in `mkdir_p'
*** [err :: <my_web_site_ip>] WARNING: DSL method Object#mkdir_p called at /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/file_utils_ext.rb:36:in `mkdir_p'
*** [err :: <my_web_site_ip>] WARNING: DSL method Object#mkdir_p called at /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/file_utils_ext.rb:36:in `mkdir_p'

...
*** [err :: <my_web_site_ip>] WARNING: DSL method Object#mkdir_p called at /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/file_utils_ext.rb:36:in `mkdir_p'
...
*** [err :: <my_web_site_ip>] WARNING: DSL method Object#mkdir_p called at /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/file_utils_ext.rb:36:in `mkdir_p'
...

*** [err :: <my_web_site_ip>] rake aborted!
*** [err :: <my_web_site_ip>] stack level too deep
*** [err :: <my_web_site_ip>] /usr/local/lib/ruby/1.9.1/ostruct.rb:92
    command finished in 48421ms

与 Capistrano 相关的代码哪里错了?如何正确使用load 'deploy/assets'语句以使部署过程正常工作?

最佳答案

您是否尝试过简单地定义自己的任务?这就是我所做的when I ran into this issue :

task :precompile, :role => :app do  
  run "cd #{release_path}/ && rake assets:precompile"  
end  
after "deploy:finalize_update", "deploy:precompile"

您确实需要 RVM initialization为此,如果您使用 RVM

关于ruby-on-rails - Rails 3.1 和 Assets 管道 : Trouble on deploying with Capistrano,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7549214/

相关文章:

ruby-on-rails - 从ajax响应中获取参数Rails

c# - 单声道 mkbundle 抛出 'IKVM.Reflection.BadImageFormatException'

java - Eclipse 无法正确复制上下文

ruby-on-rails - 在 before block 内调用时,Rspec stub 不起作用

ruby-on-rails - 如何将我的模型连接到我的应用程序

ruby-on-rails - Rails has_many 使用关联 ID 不在销毁时调用回调

ruby-on-rails-3 - 如何配置 friendly_id gem 的序列分隔符

sql-server-2005 - 如何通过数据库模式更改实现零停机部署

ruby-on-rails - 我如何将 gemspec 依赖声明为 >= 3.1 但小于 < 4.0

mysql - rails - mysql连接多个表