2014-10-02 3 views
1

Я создаю приложение rails на heroku и хочу развернуть файлы js, css и изображений в ведро на Amazon. Я не нашел много ресурсов для этого, но я использую этот (2012) учебник для руководства; https://firmhouse.com/blog/complete-guide-to-serving-your-rails-assets-over-s3-with-asset_syncAsset_Sync не нажимает на S3

Сайт в основном css и js на данный момент. Вот мой код до сих пор;

production.rb

Rails.application.configure do 

config.action_controller.asset_host = "http://localize.s3.amazonaws.com" 

config.cache_classes = true 

config.consider_all_requests_local  = false 
config.action_controller.perform_caching = true 

config.serve_static_assets = false 

config.assets.compress = true 

config.assets.compile = false 

config.assets.digest = true 

end 

инициализаторы/asset_sync.rb

if defined?(AssetSync) 
AssetSync.configure do |config| 
    config.fog_provider = ENV['FOG_PROVIDER'] 
    config.aws_access_key_id = ENV['AWS_ACCESS_KEY_ID'] 
    config.aws_secret_access_key = ENV['AWS_SECRET_ACCESS_KEY'] 
    config.fog_directory = ENV['FOG_DIRECTORY'] 
    config.fog_region = ENV['FOG_REGION'] 

# Don't delete files from the store 
config.existing_remote_files = "delete" 

# Automatically replace files with their equivalent gzip compressed version 
config.gzip_compression = true 

# Use the Rails generated 'manifest.yml' file to produce the list of files to 
# upload instead of searching the assets directory. 
config.manifest = true 

config.custom_headers = { '.*' => { cache_control: 'max-age=31536000', expires: 1.year.from_now.httpdate } } 
end 
end 

Heroku Варс

AWS_ACCESS_KEY_ID:   ***************** 
AWS_SECRET_ACCESS_KEY:  ***************************** 
FOG_DIRECTORY:    localize 
FOG_PROVIDER:     AWS 
FOG_REGION:     us-west-2 

Gemfile

gem 'rails', '4.1.1' 
gem 'uglifier', '>= 1.3.0' 
gem 'jquery-rails' 
gem 'sdoc', '~> 0.4.0', group: :doc 

#aws 
gem "fog", "~>1.20" 
gem 'asset_sync' 

group :development do 
    gem 'thin' 
end 

group :production do 
    gem 'newrelic_rpm' 
    gem 'rails_12factor' 
    gem 'pg' 
end 

Я побежал:

heroku config:add FOG_PROVIDER=AWS AWS_ACCESS_KEY_ID=xxx AWS_SECRET_ACCESS_KEY=yyy 

Наряду с

heroku config:add FOG_DIRECTORY=localize 

А потом, когда я бегу

bundle exec rake assets:precompile 

Или

RAILS_ENV=production bundle exec rake assets:precompile 

я получаю этот выход;

rake aborted! 
AssetSync::Config::Invalid: Fog directory can't be blank, Aws access key can't be blank, Aws secret access key can't be blank 

Любой, кто имеет опыт работы с рельсами, Heroku и S3, которые могли бы направить меня в правильном направлении была бы оценена. Заранее спасибо.

+0

shouldnt config.fog_directory = ENV ['localize'] быть config.fog_directory = ENV ['FOG_DIRECTORY']? – Richlewis

+0

и прочитав документы heroku, чтобы получить VARS на сервере heroku, вам может понадобиться выполнить конфигурацию heroku: установите FOG_DIRECTORY = localize, например .. вы проверили, использует ли config: add фактически добавил VARS на сервер heroku, выполнив конфигурацию heroku : получите FOG_DIRECTORY или выполните конфигурацию heroku, чтобы просмотреть все VARS, которые вы загрузили – Richlewis

+0

@ Richlewis Да, я изменил код на config.fog_directory = ENV ['FOG_DIRECTORY']. Я также управлял конфигурацией heroku: add и heroku config: установите для FOG_DIRECTORY, FOG_PROVIDER, AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY. Ошибка, которую я получил, - «rake aborted! AssetSync :: Config :: Invalid: ключ доступа Aws не может быть пустым, секретный ключ доступа Aws не может быть пустым', поэтому он работал на FOG, но не AWS – user3749994

ответ

0

Хорошо, глядя на ваши настройки, кажется, несколько вещей неправильно, Ill добавить, что я обычно использую, и мы надеемся, что это поможет вам

production.rb

ExampleApp::Application.configure do 

config.action_controller.asset_host = "http://exampleapp.s3.amazonaws.com" 

config.cache_classes = true 

config.consider_all_requests_local  = false 
config.action_controller.perform_caching = true 

config.serve_static_assets = true 

config.assets.compress = true 

config.assets.compile = true 

config.assets.digest = true 

end 

asset_sync.rb

if defined?(AssetSync) 
AssetSync.configure do |config| 
    config.fog_provider = ENV['FOG_PROVIDER'] 
    config.aws_access_key_id = ENV['AWS_ACCESS_KEY_ID'] 
    config.aws_secret_access_key = ENV['AWS_SECRET_ACCESS_KEY'] 
    config.fog_directory = ENV['FOG_DIRECTORY'] 
    config.fog_region = ENV['FOG_REGION'] 

# Don't delete files from the store 
config.existing_remote_files = "delete" 

# Automatically replace files with their equivalent gzip compressed version 
config.gzip_compression = true 

# Use the Rails generated 'manifest.yml' file to produce the list of files to 
# upload instead of searching the assets directory. 
config.manifest = true 

config.custom_headers = { '.*' => { cache_control: 'max-age=31536000', expires: 1.year.from_now.httpdate } } 
end 
end 
+0

Не повезло :(спасибо за помощь. Потому что это не работает, знаете ли вы, что я должен избавиться от всех связанных с s3 (драгоценных камней, инициализаторов и т. д.), а затем прекомпилировать такие активы, как раньше, если бы он вернулся к норме? – user3749994

+0

Я действительно не могу видеть почему это не работает, это первое ведро, которое у вас установлено с амазоном? У вас есть другие, которые работают? Очевидно, но я думал, что проверю, установили ли вы с ними счета, чтобы они могли взимать плату за использование? – Richlewis

+0

Да, это это первый раз, когда я использую AWS. Обычно я использую герою, но из-за большого количества изображений, js и css это немного медленное, поэтому я хотел ускорить его (услышал s3 как это сделать). Я подписался на бесплатный уровень, потому что это единственный сайт, который я использую s3 – user3749994

Смежные вопросы