Ruby on rails 生产错误“;application.css是';“t预编译”;即使在运行rake资产之后:也可以无错误地预编译

Ruby on rails 生产错误“;application.css是';“t预编译”;即使在运行rake资产之后:也可以无错误地预编译,ruby-on-rails,deployment,capistrano,passenger,production,Ruby On Rails,Deployment,Capistrano,Passenger,Production,由于预编译错误,我无法让cap部署我的rails项目,时间最长。找到一个脚本,该脚本清除了cap部署中的错误,但现在生产环境中的Rails抛出了一个500,并表示application.css未预编译 下面是详细情况: 设置-Ruby 2.0.0p0、Rails 3.2.13、Twitter引导、Capistrano与Passenger和Nginx一起部署到VPS 原始命令: cap deploy 错误: * executing "cd -- /var/www/scotch/releases/

由于预编译错误,我无法让cap部署我的rails项目,时间最长。找到一个脚本,该脚本清除了cap部署中的错误,但现在生产环境中的Rails抛出了一个500,并表示application.css未预编译

下面是详细情况:

设置-Ruby 2.0.0p0、Rails 3.2.13、Twitter引导、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上的说明:

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

目前,我们只是遵循这一点并添加了脚本:

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

它部署得很好,但现在我的应用程序出现了“很抱歉,出现了一些问题。”并且我的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 in production工作正常,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'

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

*= require_self
*= require your_assets

有关资产管道管理的更多详细信息,请参见。

我建议在
deploy.rb
文件中创建用户
deployer
,而不是
deploy
。Rake任务挂起“角色“部署”不存在”。您可以发布您的
应用程序。css
?我想你在其中使用了HAML语法。@QumaraSixOneTour我用这个脚本解决了这个问题:我现在遇到的错误是这篇文章底部的最后一个错误。我正在“显示我的工作”,错误在顶部。@qumarasixone我们进行了编辑并将其张贴在上面。现在,我从production.log文件中的postgres数据库中得到一个新错误。我把它添加到上面的原始帖子中。检查了my database.yml,postgres用户在那里一切都很好。它一整天都在以这样或那样的方式在这两种错误之间反弹。我很困惑。预编译和数据库:在生产环境中迁移这两项工作。我和trace一起跑来确定。它都在本地运行。看起来您的数据库的所有者与
数据库.yml
中所述的所有者不同。您还记得您是如何创建生产数据库的吗?记得。“sudo apt get install postgresql”然后是“sudo-u postgres psql postgres”,然后将我的密码设置为my database.yml文件“\password postgres”中的内容。我检查了机器和production database.yml文件中的密码。一切都匹配。用户名和密码。加上rakedb:也可以在生产环境中迁移。在我的部署中,迁移和种子都进行得很顺利。尝试通过ssh将数据库的所有者更改为服务器,将用户切换到
postgres
,然后在
psql
提示符下:
将表sequencename所有者更改为rolename
您是否已将
创建数据库作为您的生产数据库所有者或用户psql
上的code>?
*= require_self
*= require your_assets