我试图在部署到生产环境时预编译资产。我还试图第一次使用capistrano在服务器上自动安装它。在资产预编译过程中,似乎没有一个初始化程序被加载。
我正面临着这两个问题
当capistrano运行资产预编译任务时,它无法找到供应商路径或阻止它查看数据库。这使我得出一个结论,即初始化器没有加载。在经历了一些堆叠溢出的问题之后。我甚至在config/application.rb . to中添加了一个railtie
module AssetsInitializers
class Railtie < Rails::Railtie
initializer "assets_initializers.initialize_rails",
:group => :assets do |app|
require "#{Rails.root}/config/initializers/freshinstall.rb"
require "#{Rails.root}/config/initializers/vendor.rb"
end
end
end但我还是没看到任何初始化程序被加载。我能得到一些关于rail应用程序的启动进程内部的信息,以及为什么在资产预编译过程中初始化器没有被加载。
有些文档对理解这一点很有帮助。对于railtie和初始化器方法,Rails文档是非常最少的。http://guides.rubyonrails.org/configuring.html
提前谢谢你
发布于 2014-03-25 03:42:04
终于想出了该怎么做。这适用于我的单个服务器capistrano部署。下面是我的new_deploy在一个新服务器上的capistrano任务。
set :fresh_install, false
task :new_deploy do
set :fresh_install,true
deploy.setup
#The assets:precompile process is part of the deploy.update. Before the precompile process, we will create database.
deploy.update
deploy.migrate
run_seed
#load unicorn server
end不要做下面提到的任何配置设置
config.assets.initialize_on_precompile = false # no need of this in application.rb而不是在资产之前:预编译创建数据库
before "deploy:assets:precompile" , "yourapp:create_database"请检查是否设置了新安装标志,然后在使用最新版本更新服务器时,只会在常规部署期间调用create方法。在这种情况下,fresh_install标志将是假的。
desc 'Create a new database'
task :create_database, :roles => :app do
if fresh_install
run "cd #{release_path}; bundle exec rake db:create RAILS_ENV=#{rails_env}"
end
endhttps://stackoverflow.com/questions/22187060
复制相似问题