【发布时间】:2016-10-09 13:44:29
【问题描述】:
我正在 AWS Opsworks 上运行 rails 堆栈。在 before_symlink.rb 部署钩子中,我有以下代码。
rails_env = new_resource.environment["RAILS_ENV"]
shared_path = "#{new_resource.deploy_to}/shared"
# create shared directory for assets, if it doesn't exist
directory "#{shared_path}/assets" do
mode 0770
action :create
recursive true
not_if do
Dir.exists?("#{shared_path}/assets")
end
end
# symlink current deploy's asset folder to shared assets each deploy
link "#{release_path}/public/assets" do
to "#{shared_path}/assets"
end
# precompile assets into public/assets (which is symlinked to shared assets folder)
execute "rake assets:precompile" do
cwd release_path
command "bundle exec rake assets:precompile --trace"
environment 'RAILS_ENV' => rails_env
end
问题是即使没有更改,资产也会一直预编译,尽管它们位于符号链接的共享文件夹中。我在 Rails 4.1.2 上运行,我猜 Rails 足够智能,可以在 Rails 4 之后只编译更改的资产?为什么会这样?
更新
现在已经解决了。
我错过了将 /tmp/cache 符号链接到 /shared/tmp/cache。这是 sprockets 存储缓存文件的地方。
更新代码。
# Precompile assets. Assets are compiled into shared/assets and shared between deploys.
rails_env = new_resource.environment["RAILS_ENV"]
shared_path = "#{new_resource.deploy_to}/shared"
# create shared directory for assets, if it doesn't exist
directory "#{shared_path}/assets" do
mode 0770
action :create
recursive true
not_if do
Dir.exists?("#{shared_path}/assets")
end
end
#create shared directory to store sprockets cache
directory "#{shared_path}/tmp/cache" do
mode 0770
action :create
recursive true
not_if do
Dir.exists?("#{shared_path}/tmp/cache")
end
end
# symlink current deploy's asset folder to shared assets each deploy
link "#{release_path}/public/assets" do
to "#{shared_path}/assets"
end
# symlink current deploy's sprockets cache folder to shared cache folder on each deploy
link "#{release_path}/tmp/cache" do
to "#{shared_path}/tmp/cache"
end
# precompile assets into public/assets (which is symlinked to shared assets folder)
execute "rake assets:precompile" do
cwd release_path
command "bundle exec rake assets:precompile --trace"
environment 'RAILS_ENV' => rails_env
end
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 aws-opsworks