之前我曾多次使用asset_sync gem取得了巨大的成功,但在Rails 4.0.3项目中使用它似乎导致了问题。
将资产上传,散列并压缩到目标目录(我只使用默认的“资产”),但在登台/生产环境中运行应用程序时,路径不正确。
他们采取以下形式:
S3_DOMAIN.com/stylesheets/application.css
而不是:
S3_DOMAIN.com/assets/application-HASH.css
还有其他人遇到过这个问题吗?我发现反转此行为的唯一方法是将config.assets.compile设置为true,但这在生产环境中不起作用。
以下是相关的配置文件:
## environments/staging.rb
config.serve_static_assets = false
config.assets.compress = true
config.assets.js_compressor = :uglifier
config.assets.css_compressor = :sass
# Have to set this to true to make asset_sync generate the correct links
config.assets.compile = false
config.assets.digest = true
config.assets.enabled = true
config.assets.initialize_on_precompile = true
config.action_controller.asset_host = "//#{Figaro.env.fog_directory}.s3.amazonaws.com"
config.action_mailer.asset_host = "//#{Figaro.env.fog_directory}.s3.amazonaws.com"
config.assets.prefix = "/assets"
config.assets.debug = false
config.assets.cache_store = :memory_store
##config/asset_sync.yml
defaults: &defaults
fog_provider: 'AWS'
aws_access_key_id: "<%= ENV['AWS_ACCESS_KEY_ID'] %>"
aws_secret_access_key: "<%= ENV['AWS_SECRET_ACCESS_KEY'] %>"
# To use AWS reduced redundancy storage.
# aws_reduced_redundancy: true
# You may need to specify what region your storage bucket is in
fog_region: <%= ENV['FOG_REGION'] %>
existing_remote_files: keep
# To delete existing remote files.
# existing_remote_files: delete
# Automatically replace files with their equivalent gzip compressed version
gzip_compression: true
# Fail silently. Useful for environments such as Heroku
# fail_silently: true
development:
<<: *defaults
enabled: false
test:
<<: *defaults
enabled: false
staging:
<<: *defaults
fog_directory: <%= ENV['FOG_DIRECTORY'] %>
production:
<<: *defaults
fog_directory: <%= ENV['FOG_DIRECTORY'] %>
答案 0 :(得分:0)
您需要在rails 4中以production
模式运行相关的所有资产。
例如:
rake assets:precompile RAILS_ENV=production
如果你在默认模式(开发)中运行它,那么hash会有所不同,所以rails会一起离开哈希值。
此外,您需要在启动服务器之前执行此操作,以便找到文件。
注意:我认为此更改允许您在开发中缓存资产。
答案 1 :(得分:0)
希望这将有助于拯救我的程序员朋友们一些头疼:D。我已在“digest_path & asset_digest_path not allowing digest URLs”上回答了这个问题,但会在此处重新发布,以便为您节省一些点击次数。
我正在将文件上传到S3,我没有意识到Rails没有加载清单。您可以正确设置所有生产设置(如上面和其他线程),但如果您没有Rails可读的manifest.json文件,它仍会生成/ javascript / *(示例)网址。
我仍然遇到multi_json
gem最新版本的问题,因此我将其降级为1.7.8并且工作正常。
gem 'multi_json', '1.7.8'
这样就可以读取manifest.json
创建的rake assets:precompile
文件。
关于这个sprockets线程https://github.com/rails/sprockets-rails/issues/107关于你的清单文件是应该在git中还是仅在部署脚本上存在争论,做最适合你的事情,只需确保它在以下内容中找到:
/public/assets/manifest.json
或用
指定config.assets.manifest = '...'
可能会或可能不会被删除。
干杯!