【问题标题】:Production error "application.css isn't precompiled" even after running rake assets:precompile without errors即使在运行 rake assets 之后,生产错误“application.css 未预编译”:预编译没有错误
【发布时间】:2013-03-10 06:06:00
【问题描述】:

由于最长时间的预编译错误,我无法部署我的 rails 项目。找到了一个清除 cap deploy 错误的脚本,但是现在生产中的 Rails 抛出 500 并说 application.css 没有预编译。

这里是纲要:

设置 - Ruby 2.0.0p0、Rails 3.2.13、Twitter-Bootstrap、Capistrano 通过Passenger 和 Nginx 部署到 VPS

原始命令:

cap deploy

错误:

* executing "cd -- /var/www/scotch/releases/20130320194644 && /home/deploy/.rvm/gems/ruby-2.0.0-p0@global/bin/bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile && cp -- /var/www/scotch/shared/assets/manifest.yml /var/www/scotch/releases/20130320194644/assets_manifest.yml"
servers: ["198.211.112.227"]
[198.211.112.227] executing command
** [out :: 198.211.112.227] rake aborted!
** [out :: 198.211.112.227] FATAL:  role "deploy" does not exist

我的deploy.rb 文件:

require "rvm/capistrano"
require "bundler/capistrano"
set :bundle_cmd, "/home/deploy/.rvm/gems/ruby-2.0.0-p0@global/bin/bundle"
set :bundle_dir, "/home/deploy/.rvm/gems/ruby-2.0.0-p0/gems"

set :rvm_ruby_string, :local
set :application, "scotch"
set :user, 'deploy'
set :domain, '198.211.112.227'
set :applicationdir, "/var/www/scotch"

set :scm, 'git'
set :repository,  "ssh://deploy@198.211.112.227/var/www/scotch.git"
#set :git_enable_submodules, 1 # if you have vendored rails
set :scm_passphrase, ""
set :branch, 'master'
set :git_shallow_clone, 1
set :scm_verbose, true

# roles (servers)
role :web, domain
role :app, domain
role :db,  domain, :primary => true

# deploy config
set :deploy_to, applicationdir
set :deploy_via, :export

# additional settings
default_run_options[:pty] = true  # Forgo errors when deploying from windows
 ssh_options[:keys] = %w(/home/user/.ssh/id_rsa)            # If you are using ssh_keysset :chmod755, "app config db lib public vendor script script/* public/disp*"set :use_sudo, false

# Passenger
namespace :deploy do
  task :start do ; end
  task :stop do ; end
  task :restart, :roles => :app, :except => { :no_release => true } do
    run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}"
  end
end

Capfile:

load 'deploy'
# Uncomment if you are using Rails' asset pipeline
load 'deploy/assets'
load 'config/deploy' # remove this line to skip loading any of the default tasks

Application.rb 包括:

config.assets.initialize_on_precompile = false

根据 StackOverflow 上的说明:rake assets:precompile attempting to connect to database

Database.yml 是为生产数据库设置的。数据库迁移就好了等等。

目前只是跟着这个并添加了脚本: Speed up assets:precompile with Rails 3.1/3.2 Capistrano deployment

预编译在 VPS 上工作并使用 --trace 在本地运行:

rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile

它部署得很好,但现在我的应用程序正在提供“我们很抱歉,但出了点问题”。我的 production.log 给了我这个错误:

ActionView::Template::Error (application.css isn't precompiled):
4:     %meta{:content => "width=device-width, initial-scale=1.0", :name => "viewport"}

app/assets/stylesheets/application.css.scss

.content {
background-color: #eee;
padding: 20px;
margin: 0 -20px; /* negative indent the amount of the padding to maintain the grid system */
-webkit-border-radius: 0 0 6px 6px;
-moz-border-radius: 0 0 6px 6px;
 border-radius: 0 0 6px 6px;
-webkit-box-shadow: 0 1px 2px rgba(0,0,0,.15);
-moz-box-shadow: 0 1px 2px rgba(0,0,0,.15);
 box-shadow: 0 1px 2px rgba(0,0,0,.15);
 }

编辑 - 显示新错误: 出于某种原因,现在它甚至没有达到这一点,我的 production.log 文件显示了这一点,即使 rake db:migrate 在生产中工作正常并且 database.yml 都是正确的:

ActiveRecord::StatementInvalid (PG::Error: ERROR:  permission denied for relation     reviews
: SELECT  "reviews".* FROM "reviews"  LIMIT 30 OFFSET 0):
app/models/review.rb:10:in `search'
app/controllers/reviews_controller.rb:6:in `index'

【问题讨论】:

  • 我建议在您的 deploy.rb 文件中创建用户 deployer,而不是 deploy。 Rake 任务挂在“角色 'deploy' 不存在”上。
  • 你能发布你的application.css 吗?我认为您在其中使用了 HAML 语法。
  • @QumaraSixOneTour 我可以用这个脚本解决这个问题:stackoverflow.com/questions/9016002/… 我现在遇到的错误是这篇文章底部的最后一个错误。我正在“展示我的工作”,顶部有错误。
  • @QumaraSixOneTour 我进行了编辑并发布在上面

标签: ruby-on-rails deployment capistrano passenger production


【解决方案1】:

我建议将您的 css 代码从清单文件 application.css 移到(例如)custom.css.scss 中。在清单文件中,您必须声明您想在应用程序中使用的 css assets,如下所示:

*= require_self
*= require your_assets

您可以在this Rails Guide 中找到有关资产管道管理的更多详细信息。

【讨论】:

  • 现在我从我的 production.log 文件中的 postgres 数据库中收到一个新错误。我将它添加到上面的原始帖子中。检查了我的 database.yml,postgres 用户的一切都很好。它整天都在以一种或另一种方式在这两种类型的错误之间反弹。我感到很困惑。 precompile 和 db:migrate 都在生产环境中工作。我正在运行 --trace 以确保。这一切都在本地运行。
  • 您的数据库似乎与database.yml 中所述的所有者不同。您还记得您是如何在生产环境中创建数据库的吗?
  • 是的。 “sudo apt-get install postgresql” THEN “sudo -u postgres psql postgres” 然后将我的密码设置为我的 database.yml 文件“\password postgres”中的内容。我检查了机器上和生产 database.yml 文件中的密码。一切都匹配。用户名和密码。 PLUS rake db:migrate 在生产工作中也是如此。在我的部署中,迁移和播种一切顺利。
  • 尝试通过 ssh 将数据库的所有者更改为您的服务器,将用户切换到 postgres ,然后在 psql 提示:ALTER TABLE sequencename OWNER TO rolename;
  • 您是否在服务器上的psql 上创建了类似CREATE DATABASE your_production_db OWNER youruser; 的内容?
猜你喜欢
  • 1970-01-01
  • 2012-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-20
相关资源
最近更新 更多