2012-02-08 17 views
8

私のアプリが正常に展開されるが、私はこのエラーを取得していそうです:私は資産をコンパイルしようとしているため、ここでの解決策を試してみたCapistranoは資産をコンパイルするエラー - 資産:プリコンパイル:非永続?

 * executing "cd /home/deploy/tomahawk/releases/20120208222225 && bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile" 
    servers: ["ip_address"] 
    [ip_address] executing command 
*** [err :: ip_address] /opt/ruby/bin/ruby /opt/ruby/bin/rake assets:precompile:nondigest RAILS_ENV=production RAILS_GROUPS=assets 

http://lassebunk.dk/2011/09/03/getting-your-assets-to-work-when-upgrading-to-rails-3-1/

そして、ここで:http://railsmonkey.net/2011/08/deploying-rails-3-1-applications-with-capistrano/

そして、ここに:ここにhttp://dev.af83.com/2011/09/30/capistrano-rails-3-1-assets-can-be-tricky.html

は私deploy.rbです:

require "bundler/capistrano" 
load 'deploy/assets' 

set :default_environment, { 
'PATH' => "/opt/ruby/bin/:$PATH" 
} 

set :application, "tomahawk" 
set :repository, "repo_goes_here" 
set :deploy_to, "/home/deploy/#{application}" 
set :rails_env, 'production' 
set :branch, "master" 

set :scm, :git 
set :user, "deploy" 
set :runner, "deploy" 
set :use_sudo, true 

role :web, "my_ip"       
role :app, "my_ip"       
role :db, "my_ip", :primary => true 

set :normalize_asset_timestamps, false 
after "deploy", "deploy:cleanup" 

namespace :deploy do 
    desc "Restarting mod_rails with restart.txt" 
    task :restart, :roles => :app, :except => { :no_release => true } do 
     run "touch #{current_path}/tmp/restart.txt" 
    end 

    [:start, :stop].each do |t| 
     desc "#{t} task is a no-op with mod_rails" 
     task t, :roles => :domain do ; end 
    end 
end 

task :after_update_code do 
run "ln -nfs #{deploy_to}/shared/config/database.yml #{release_path}/config/database.yml" 
end 
+0

私はまったく同じ私のレール3.1アプリを展開するときに持っています。私はそれがどこかの[sprockets rake task](https://github.com/rails/rails/blob/master/actionpack/lib/sprockets/assets.rake)に隠れていると思うが、私はそれを見ない。 'precompile:assets:nondigest'タスクがstderrなどに警告を記録することができますか?これはcapistranoによって選択されますか? – HectorMalot

+0

真実を伝えるために、この非本質的なものは私の理解の範囲から少し外れています(まだプリコンパイルの周りを頭で囲んでいます:) - しかし、私はこれを友人に見せて、こう言いました... "すべて 私は出力が何とかうんざりしていると思う、そのエラーストリームは、正常な出力が正常に終了する限り、通常の出力を使用すると、実際のエラーが実行を停止します。 – fatfrog

答えて

1

私は後でカピストラーノは、古いリリースを削除することができなかったことに気づいた、私はエラーを得た:

*** [err :: ip_address] sudo: no tty present and no askpass program specified 

私は、このエラーについては、このリンクが見つかりました:私はこの行を追加する必要がありました http://www.mail-archive.com/[email protected]/msg07323.html

を私の展開ファイル:

default_run_options[:pty] = true 

これは、私が上になっていた奇妙なエラーを解決しました。

私は理解していない公式の説明、:)

デフォルトはありませんPTY。 2.1より前に、Capistranoは実行した各コマンドに対して擬似ttyを要求しました。これには、ユーザーのプロファイルスクリプトがロードされないという副作用がありました。まあ、もう! 2.1以降、Capistranoは各コマンドのptyを要求しなくなりました。つまり、.profile(または.bashrcなど)が各コマンドに正しくロードされます。ただし、一部のシステムではptyが割り当てられていないと報告されているものもありますが、コマンドによっては非対話モードに自動的に移行するものもあります。たとえsvnやpasswdのようなコマンドプロンプトが表示されない場合は、capfileに次の行を追加することで以前の動作に戻ることができます:default_run_options [:pty] = true

7

最初ちょうどあなたafter_update_codeにこの行を追加するには、キャップファイルで、その後

group :production do 
gem 'therubyracer' 
gem 'execjs' 
end 

の下に宝石を追加することを忘れないでください

run "cd #{release_path}; rake assets:precompile RAILS_ENV=production " 

これは私のためにうまく働いた;)

歓声、

グレゴリーHORION

+4

ちょっとちょっと、私はあなたのアドバイスを表示するあなたのメッセージのIPは、これはあなたのサーバーへの攻撃につながる可能性があります;)歓声 – metakungfu

+0

Woops!:)コピーとペーストを見なければならない! – fatfrog

2

私は同じ問題があります。私はこれを私の展開に追加しました。(オプション '--trace' を追加するための)RB:

namespace :deploy do 
    namespace :assets do 
    task :precompile, :roles => :web, :except => { :no_release => true } do 
     run "cd #{current_path} && #{rake} RAILS_ENV=#{rails_env} RAILS_GROUPS=assets assets:precompile --trace" 
    end 
    end 
end 

とエラーがちょうど予告のようだ:

*** [err :: my-server] ** Invoke assets:precompile (first_time) 
... 
1

は、ここで私のために働いていたものです:

1)は、RVM-カピストラーノを追加します。

require 'rvm/capistrano' 
set :rvm_ruby_string, '1.9.2' # Set to your version number 
01:confgファイルでのごGemfile

2)に/展開、行を追加します。

3)rvm_typeと:rvm_bin_pathも設定する必要があります。詳細については、this Ninjahideout blogを参照してください。

4)apt-getの/ yumをサーバー

にnodejsをインストールする(このrelated Stackoverflow questionに私の返事を参照してください。)

0

ご覧メッセージがrake assets:precompileの出力です。

あなたが-q behandあなたのコマンドを追加するソリューションは、デフォルトの出力

を避けるためにどのようにrake assets:precompileを実行すると、あなたが見たい場合は、

分析は、以下の通りです:

# :gem_path/actionpack/lib/sprockets/assets.rake 
namespace :assets do 

    # task entry, it will call invoke_or_reboot_rake_task 
    task :precompile do 
    invoke_or_reboot_rake_task "assets:precompile:all" 
    end 

    # it will call ruby_rake_task 
    def invoke_or_reboot_rake_task(task) 
    ruby_rake_task task 
    end 

    # it will call ruby 
    def ruby_rake_task(task, fork = true) 
    env = ENV['RAILS_ENV'] || 'production' 
    groups = ENV['RAILS_GROUPS'] || 'assets' 
    args = [$0, task,"RAILS_ENV=#{env}","RAILS_GROUPS=#{groups}"] 
    ruby(*args) 
    end 
end 

# :gem_path/rake/file_utils.rb 
module FileUtils 

    # it will call sh 
    def ruby(*args,&block) 
    options = (Hash === args.last) ? args.pop : {} 
    sh(*([RUBY] + args + [options]), &block) 
    end 

    # it will call set_verbose_option 
    # and if options[:verbose] == true, it do not output cmd 
    # but default of options[:verbose] is an object 
    def sh(*cmd, &block) 
    # ... 
    set_verbose_option(options) 
    # ... 
    Rake.rake_output_message cmd.join(" ") if options[:verbose] 
    # ... 
    end 

    # default of options[:verbose] is Rake::FileUtilsExt::DEFAULT, which is an object 
    def set_verbose_option(options) # :nodoc: 
    unless options.key? :verbose 
     options[:verbose] = 
     Rake::FileUtilsExt.verbose_flag == Rake::FileUtilsExt::DEFAULT || 
     Rake::FileUtilsExt.verbose_flag 
    end 
    end 
end 

# :gem_path/rake/file_utils_ext.rb 
module Rake 
    module FileUtilsExt 
    DEFAULT = Object.new 
    end 
end 

# :gem_path/rake/application.rb 
      # the only to solve the disgusting output when run `rake assets:precompile` 
      # is add a `-q` option. 
      ['--quiet', '-q', 
      "Do not log messages to standard output.", 
      lambda { |value| Rake.verbose(false) } 
      ], 
      ['--verbose', '-v', 
      "Log message to standard output.", 
      lambda { |value| Rake.verbose(true) } 
      ],