标签: asset-sync

Rails 4公共/或app/assets /中的静态资产

对不起,如果这是一个简单问题的冗长积累,但我想清楚我的想法.

我现在已经在几个项目中使用了Rails 4,并且我一直在使用它image_tag('/assets/image.png')来解决资产路径助手在Rails 4中如何工作的变化.直到今天,当我决定更多地了解这些变化并发现第一次更改时注意在链轮轨道.我还注意到ASSET_PUBLIC_DIRECTORIESRails助手中的/actionview/lib/action_view/helpers/asset_url_helper.rb#L170只指向公用文件夹.对我来说很明显,如果你正在访问静态文件,Rails希望你使用公共文件夹.

所以现在我已经想到了这一点,我只是无法理解为什么edge rails docs清楚地说明了这一点:

在以前版本的Rails中,所有资产都位于公共子目录中,例如图像,javascripts和样式表.使用资产管道,这些资产的首选位置现在是app/assets目录.

image_path实际上会生成一个uri到public/images文件夹,这完全相反.

总而言之,我需要使用所有可用的帮助程序和摘要构建器,因为我最终使用asset_sync将资产部署到S3 .

所以我的问题只是; 是否有正确的位置来放置图像/非编译资产并使用asset_path助手?所有文档和所有其他堆栈溢出对话都是关于使用app/assets文件夹的人,但是sprockets-rails希望我们将public用于非摘要资产.网络上的文档和信息是否需要更新,或者其他人只是通过在/ assets /之前预先设置所有资产路径来实现?

更新:我认为我确实遇到了一个问题,我没有重新启动我的开发服务器,并且app/assets/images中的图像没有显示出来,所以它会回退到公众面前.还要注意我在我的paperclip default_url中使用了资产助手(在我找到的几个堆栈溢出答案中引用资源的方式被引用,但是在回形针中使用带有插值选项的资产路径助手也将回退到公众,因为未插入的资产名称显然不会被发现为现有文件.

sprockets asset-pipeline ruby-on-rails-4 asset-sync

20
推荐指数
1
解决办法
2万
查看次数

Rails 4.0.3使用asset_sync生成不正确的资产路径

我以前曾多次使用asset_sync gem取得了巨大成功,但在Rails 4.0.3项目中使用它似乎导致了问题.

资产被上传,散列和gzip到目标目录(我只使用默认的'assets'),但是当在临时/生产环境中运行应用程序时,路径不正确.

他们采取以下形式:

S3_DOMAIN.com/stylesheets/application.css
Run Code Online (Sandbox Code Playgroud)

代替:

S3_DOMAIN.com/assets/application-HASH.css
Run Code Online (Sandbox Code Playgroud)

还有其他人遇到过这个问题吗?我发现反转此行为的唯一方法是将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 …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails asset-pipeline ruby-on-rails-4 asset-sync

7
推荐指数
1
解决办法
1030
查看次数

asset_sync gem error:rake assets:预编译失败:与服务器证书不匹配(OpenSSL :: SSL :: SSLError)

asset_sync gem error :(

我开始的第一个错误与unfgem有关,所以我添加gem "unf", "~> 0.1.3"到我的gemfile并再次尝试.没有运气:(经过更多研究后,我可能会遇到与我的aws桶相关的其他设置的问题.我的dns是通过route53托管的,我想使用自定义域来提供我的资产.这意味着我的桶看起来不像assets.domain.com只是一个简单的名称.当我尝试运行rake assets:precompilerake aborted! hostname "assets.domain.com.s3-us-west-1.amazonaws.com" does not match the server certificate (OpenSSL::SSL::SSLError)"时会出现错误但是错误似乎是错误的.为了使用你自己的子域即资产.我读到桶必须设置为静态网站.这意味着网址看起来assets.domain.com.s3-website-us-west-1.amazonaws.com似乎与错误代码不匹配.

我在这里错过了一个设置吗?也许我很疯狂...谢谢你的帮助.

我的production.rb设置

# Enable serving of images, stylesheets, and JavaScripts from an asset server.
AssetSync.config.run_on_precompile = true
config.action_controller.asset_host = "http://assets.domain.com"
config.assets.prefix = "/data"

config.assets.enabled = true
config.assets.compile = true
config.assets.initialize_on_precompile = true

# Generate digests for assets URLs.
config.assets.digest = true
Run Code Online (Sandbox Code Playgroud)

我当前的初始化文件:

if defined?(AssetSync)
  AssetSync.configure do |config|
    config.fog_provider = …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails amazon-s3 amazon-web-services asset-sync

3
推荐指数
1
解决办法
1165
查看次数

Rails AngularJS指令和模板中的图像资源

我使用这些宝石使用AngularJS进行Rails 4应用程序:

  • 宝石'angularjs-rails'
  • 宝石'angular-rails-templates'
  • 宝石'asset_sync'

它适用于这样的模板:

    <img ng-controller='LikePostController'  
       ng-dblclick='like(post);' 
       ng-src='{{post.photo.standard}}' 
       class='lazy post_photo pt_animate_heart'
       id='post_{{post.id}}_image'
     />
Run Code Online (Sandbox Code Playgroud)

图像渲染正确.但是在我的其他js

petto.directive('ptAnimateHeart', ['Helper', function(Helper){
    linkFunc = function(scope, element, attributes) {
      $heartIcon = $("#heart_icon");

      if($heartIcon.length == 0) {
        $heartIcon = $("<img id='heart_icon' src='/assets/feed.icon.heart.png' alt='Like' /> ");
        $(document.body).append($heartIcon);
      }

      element.on('dblclick', function(event){
        $animateObj = $(this);
        Helper.animateHeart($animateObj);
      });
    }
    return { 
      restrict: 'C',
      link: linkFunc
    }

  }])
Run Code Online (Sandbox Code Playgroud)

我从浏览器控制台找不到'assets/feed.icon.heart.png'错误.我在app/assets/feed.icon.heart.png下有feed.icon.heart.png.

ps:忘记提及我使用资产同步gem来托管亚马逊s3中的资产.图像在开发中运行良好,但在生产中没有.

ruby-on-rails angularjs asset-sync

1
推荐指数
1
解决办法
4577
查看次数