Capistrano编译资产错误 - 资产:预编译:非文化?

fat*_*rog 8 deployment capistrano ruby-on-rails-3.1

我的应用程序似乎正在正确部署,但我收到此错误:

      * 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
Run Code Online (Sandbox Code Playgroud)

我在这里尝试过尝试编译资产的解决方案: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
Run Code Online (Sandbox Code Playgroud)

met*_*gfu 7

首先不要忘记在下面添加宝石

group :production do
 gem 'therubyracer'
 gem 'execjs'
end
Run Code Online (Sandbox Code Playgroud)

然后在你的cap文件中只需在after_update_code中添加这一行

run "cd #{release_path}; rake assets:precompile RAILS_ENV=production "
Run Code Online (Sandbox Code Playgroud)

这对我来说很好;)

干杯,

Gregory HORION

  • 嘿伙计,我建议你不要在你的消息中显示你的IP,这可能会导致你的服务器受到一些攻击;)欢呼 (4认同)

fat*_*rog 1

后来我注意到 capistrano 无法删除旧版本,我收到一个错误:

\n\n
*** [err :: ip_address] sudo: no tty present and no askpass program specified\n
Run Code Online (Sandbox Code Playgroud)\n\n

我找到了有关此错误的链接:\n http://www.mail-archive.com/capistrano@googlegroups.com/msg07323.html

\n\n

我必须将此行添加到我的部署文件中:

\n\n
default_run_options[:pty] = true\n
Run Code Online (Sandbox Code Playgroud)\n\n

这也解决了我上面遇到的奇怪错误。

\n\n

官方的解释,我不太明白:)

\n\n

没有默认的 PTY。在 2.1 之前,Capistrano 会为其执行的每个命令请求一个伪 tty。这会产生副作用,导致用户的配置文件脚本无法加载。好吧,没有了!从 2.1 开始,Capistrano 不再在每个命令上请求 pty,这意味着您的 .profile(或 .bashrc 或其他)将在每个命令上正确加载!但请注意,有些人报告在某些系统上,当未分配 pty 时,某些命令将自动进入非交互模式。如果您\xe2\x80\x99 没有像以前那样看到命令提示符,例如 svn 或 passwd,您可以通过将以下行添加到您的 capfile 来返回到之前的行为:default_run_options[:pty] = true

\n