2

たぶん本当に気の利いた質問で、これについて私をマークダウンしないでください、しかし私はついにHerokuにasset_syncを使ってS3バケットの静的アセットをコンパイルさせました。

アセットが実際にそこから提供されていることをどうやって知ることができますか?s3からアセットを引き込む魔法は何も起こっていないと思いますか?プレフィックスが付いた各アセットのパスを設定する必要があります

https://s3-eu-west-1.amazonaws.com/pathto/asset

これをsinatraで明示的に設定する方法はありますか?すべてのアセットを手動で変更する必要はありませんか?それはばかげているでしょう。

Asset_syncドキュメントはこれをRailsで使用すると言っています

config.action_controller.asset_host = "//#{ENV['FOG_DIRECTORY']}.s3.amazonaws.com"

しかし、シナトラでこれを設定する方法がわかりません

編集

require 'bundler/setup'
Bundler.require(:default)
require 'active_support/core_ext'
require './config/env' if File.exists?('config/env.rb')
require './config/config'
require "rubygems"
require 'sinatra'


configure :development do
AssetSync.config.action_controller.asset_host = "//#{ENV['FOG_DIRECTORY']}.s3.amazonaws.com"
end


get '/' do
 erb :index
end

get '/about' do
 erb :about
end

これにより、コンソールで次のエラーが発生します

 undefined method `action_controller' for #<AssetSync::Config:0x24d1238> (NoMethodError)
4

1 に答える 1

2

Asyncビルトインイニシャライザーを介してSinatraのconfigureブロックに入れてみてください。例:

configure :production do
  AssetSync.config.action_controller.asset_host = "//#{ENV['FOG_DIRECTORY']}.s3.amazonaws.com"
end

いつか電話をかけなければならない可能性もありますがAssetSync.sync、よくわかりません。


編集:構成ブロックを使用します。

モジュラーアプリを使用していた場合(そうでない場合は、違いはありません。classビットを削除するだけです)

class App < Sinatra::Base
  configure :development do
    set :this, "and that"
    enable :something
    set :this_only, "gets run in development mode"
  end

  configure :production do
    set :this, "to something else"
    disable :something
    set :this_only, "gets run in production"
    # put your AssetSync stuff in here
  end

  get "/" do
    # …
  end

  get "/assets" do
    # …
  end

  post "/more-routes" do
    # …
  end

  # etc
end

詳細については、上記で追加したリンクを参照してください。


action_controllerRailsの一部です。パスのプレフィックスを付けるには、ヘルパーを使用するのが最善の方法です。

helpers do
  def aws_asset( path )
    File.join settings.asset_host, path
  end
end

configure :production do
  set :asset_host, "//#{ENV['FOG_DIRECTORY']}.s3.amazonaws.com"
end

configure :development do
  set :asset_host, "/" # this should serve it from the `public_folder`, add subdirs if you need to.
end

次に、ルートまたはビューで次のようなことを行うことができます。

aws_asset "sprite_number_1.jpg"

ERBおよびsinatra-static-assetsのimage_tagで使用するには:

image_tag( aws_asset "sprite_number_1.jpg" )

またはそれらを組み合わせます(image_tagヘルパーがヘルパーのスコープに表示されない可能性があるため、これは機能しない可能性があります。考えるよりも試す方が簡単です):

helpers do
  def aws_image( path )
    image_tag( File.join settings.asset_host, path )
  end
end

# in your view
aws_image( "sprite_number_1.jpg" )

これを行うためのより簡単な方法があると確信していますが、これは迅速で汚い解決策になります。

于 2013-03-19T23:38:46.360 に答える