轨道3.1和资产管道:使用Capistrano进行部署时出现问题 [英] Rails 3.1 and Asset Pipeline: Trouble on deploying with Capistrano

查看:180
本文介绍了轨道3.1和资产管道:使用Capistrano进行部署时出现问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我刚刚从Ruby on Rails 3.0.10切换到3.1.0,我想使用Capistrano gem来部署我的资产文件(我的本地机器是运行Snow Leopard的MacOs,我的远程机器正在运行Ubuntu 10.04 Lucid )。因此,如官方指南所述,我取消注释 load'deploy /资源在我的 Capfile 中,如下所示:

 #如果您使用Rails的资产管道,则取消注释
加载'deploy / assets'

现在,当我运行 cap deploy 命令时,我收到以下错误(错误在底部说明):

  ... 

*执行cd /< application_absolute_path> / releases / 20110925223032& rake RAILS_ENV = production RAILS_GROUPS =资产资产:预编译
servers:[< my_web_site_ip>]
[< my_web_site_ip>]执行命令
** [out ::< my_web_site_ip>](in /< application_absolute_path&版本/ 20110925223032)
*** [err ::< my_web_site_ip>]耙子中止!
*** [err ::< my_web_site_ip>]未初始化的常量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:在`< 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:在`< 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:在`< 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 :在`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 :在`< 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:在'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:在`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`load 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:ineach
*** [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:在`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:在`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:在`load_tasks'
*** [err ::< my_web_site_ip>] /usr/local/lib/ruby/gems/1.9 .1 / gems / railties-3.1.0 / lib / rails / railtie / configured.rb:30:在`method_missing'
*** [err ::< my_web_site_ip>] /< application_absolute_path> / releases / 20110925223032 / Rakefile:7:在`< 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 /本地/ lib / ruby​​ / 1.9.1 / rake.rb:2373:在`raw_load_rakefile'
*** [err ::< my_web_site_ip>] /usr/local/lib/ruby/1.9.1/rake .rb:2007:在`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 :在`< main>'
命令完成在4301ms
*** [部署:update_code]回滚
*执行rm -rf /< application_absolute_path> / releases / 20110925223032;
服务器:[< my_web_site_ip>]
[< my_web_site_ip>]执行命令
命令在377ms中完成
失败:sh -c'cd / ; application_absolute_path> / releases / 20110925223032& amp;& rake RAILS_ENV = production RAILS_GROUPS = assets assets:precompile'on< my_web_site_ip>

所以,我试过解决问题,按照这个问题的答案, a>:

 #Rakefile 
require'rake / dsl_definition'

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

< MyApplicationName> :: Application.load_tasks

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

  ... 

*执行cd /< application_absolute_path> / releases / 20110925160036& rake RAILS_ENV = production RAILS_GROUPS = assets assets:precompile
servers:[< my_web_site_ip>]
[< my_web_site_ip>]执行命令
*** [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:已初始化常数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:已初始化常量LN_SUPPORTED
** [out ::< my_web_site_ip>](in /< application_absolute_path> / releases / 20110925160036)
*** [err ::< my_web_site_ip>]警告:全局访问Rake DSL方法已被弃用请包含
*** [err ::< my_web_site_ip>] ... Rake :: DSL进入使用Rake DSL方法的类和模块
*** [err ::< my_web_site_ip>]警告:DSL方法对象#mkdir_p在/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 DSL方法。请将
*** [err ::< my_web_site_ip>] ... Rake :: DSL引入使用Rake DSL方法的类和模块。
*** [err ::< my_web_site_ip>]警告:DSL方法对象#mkdir_p在/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/中调用rake / file_utils_ext.rb:36:在`mkdir_p'
*** [err ::< my_web_site_ip>]警告:DSL方法对象#mkdir_p在/usr/local/lib/ruby/gems/1.9调用。 1 / gems / rake-0.9.2 / lib / rake / file_utils_ext.rb:36:在`mkdir_p'
*** [err ::< my_web_site_ip>]警告:DSL方法对象#mkdir_p在/ usr / local / lib / ruby​​ / gems / 1.9.1 / gems / rake-0.9.2 / lib / rake / file_utils_ext.rb:36:在`mkdir_p'

...
*** [err ::< my_web_site_ip>]警告:DSL方法对象#mkdir_p在/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/file_utils_ext中调用.rb:36:在`mkdir_p'
...
*** [err ::< my_web_site_ip>]警告:DSL方法对象#mkdir_p在/ usr / local / lib / ruby​​ / gems / 1.9.1 / gems / rake-0.9.2 / lib / rake / file_utils_ext.rb:36:在`mkdir_p'
...

*** [err :: < my_web_site_ip>]耙子中止!
*** [err ::< my_web_site_ip>]堆栈级别太深
*** [err ::< my_web_site_ip>] /usr/local/lib/ruby/1.9.1/ostruct .rb:92
命令在48421ms中完成

与Capistrano相关的代码是错的?如何正确使用加载'deploy / assets'语句,以使部署过程正常工作?

您是否尝试过简单地定义自己的任务?这就是我所做的一切当我遇到这个问题

  task:precompile,:role => :app do 
运行cd#{release_path} /& rake assets:precompile
end
afterdeploy:finalize_update,deploy:precompile

你需要 RVM初始化,如果您使用RVM


I just switched from Ruby on Rails 3.0.10 to 3.1.0 and I would like to deploy my asset files by using the Capistrano gem (my local machine is a MacOs running Snow Leopard, my remote machine is running Ubuntu 10.04 Lucid). So, as wrote in the Official Guide, I uncomment the load 'deploy/assets' in my Capfile like this:

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

Now, when I run the cap deploy command I get the following error (the error is explained at the bottom):

...

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

So, I tried to solve the problem following the answer to this question:

# Rakefile
require 'rake/dsl_definition'

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

<MyApplicationName>::Application.load_tasks

After I run again the cap deploy command I get the following error:

...

  * 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

Where the code related to Capistrano is wrong? How to use correctly the load 'deploy/assets' statement in order to make the deployment process to work?

解决方案

Have you tried simply defining your own task? That's what I did 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"

You do need RVM initialization for this if you use RVM

这篇关于轨道3.1和资产管道:使用Capistrano进行部署时出现问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆