0

そのため、Amazon s3 から静的アセットをローカルで提供しようとしています。Heroku の場合、yml ファイルをロードしていましたが、Heroku がシンボリック リンクを受け入れないため、機能しません。

そのため、Herokuもこれらを使用しているため、ENV変数を使用するよう提案されました。アセットを AWS にプリコンパイルするレーキ タスクがあります。現在2つの問題

1) ENV 変数が読み取られません (フォグ ディレクトリを空白にすることはできません、Aws アクセス キーを空白にすることはできません、Aws シークレット アクセス キーを空白にすることはできません

2) rake タスクを実行すると、「定数 VALID_CHARACTER が既に初期化されています」というエラーも表示されます。

それでは、activesupport 定数が 2 回読み込まれているのでしょうか。

私のセットアップ

env.rb

ENV['aws_bucket'] = 'bucketname'
ENV['aws_access_key'] = 'myaccesskey'
ENV['aws_secret_key'] = 'mysecretkey'

レーキファイル

require 'bundler/setup'
 Bundler.require(:default)
 require './env' if File.exists?('env.rb')


AssetSync.configure do |con|
con.fog_provider = 'AWS'
con.fog_region = 'eu-west-1'
con.fog_directory = ENV['aws_bucket']
con.aws_access_key_id = ENV['aws_access_key']
con.aws_secret_access_key = ENV['aws_secret_key']
con.prefix = "assets"
con.public_path = Pathname("./public")   
end

namespace :assets do
 desc "Precompile assets"
task :precompile do
AssetSync.sync
end

Gemfile

source :rubygems
gem 'sinatra'
gem 'pony'
gem 'sinatra-flash'
gem 'heroku'
gem 'asset_sync', git: 'git://github.com/ejholmes/asset_sync.git', branch: 'sinatra'

アップデート

AssetSync は gemspec でアクティブにサポートされているため、何らかの形で含まれています。ポニーgemspecのメールgemで定義されている定数と競合しているようです。

したがって、Pony gem を削除すると、アセットをローカルでプリコンパイルできますが、heroku 用にコンパイルしようとしても何も起こらず、rake タスクが開始されますが、新しいコマンドの準備が整った端末に戻ります。

もう 1 つは、メーラーに Pony が必要なのですが、どうすればこれを回避できますか?

4

2 に答える 2

2

Pony と Rake をローカルで実行するときの衝突を取り除くには、gem を別のグループに入れます。

# Gemfile
group :assets do
  gem 'asset_sync', git: 'git://github.com/ejholmes/asset_sync.git', branch: 'sinatra'
end

group :mail do
  gem "pony"
end

# more…

レーキファイルで

Bundler.require(:assets,:database,:whatever_else_you_need)

Rackup/app ファイルで

Bundler.require(default,:assets,:database,:mail,:whatever_else_you_need)

あなたの他の問題に関しては、あなたが尋ねた他の質問で私が言ったようにheroku config、本番用の環境変数を設定し(https://devcenter.heroku.com/articles/config-varsを参照)、Rakefileを使用してローカルにロードする必要がありますこれ。環境変数は Ruby プロセスの範囲で存続するため、Rake 経由でそれらをロードし、同じ Rake プロセス内でローカル サーバー起動すると、Sinatra がすべての環境変数を取得します。


編集:環境変数は、それらを追加したプロセスが続く限り存続するため、それらを依存タスクに配置すると、次のタスクがそれらにアクセスできます。

namespace :assets do

  task :environment do
    AssetSync.configure do |con|
      con.fog_provider = 'AWS'
      con.fog_region = 'eu-west-1'
      con.fog_directory = ENV['aws_bucket']
      con.aws_access_key_id = ENV['aws_access_key']
      con.aws_secret_access_key = ENV['aws_secret_key']
      con.prefix = "assets"
      con.public_path = Pathname("./public")   
    end
  end

 desc "Precompile assets"
 task :precompile => :"assets:environment" do
   AssetSync.sync
 end
于 2013-03-19T00:23:40.937 に答える
1

これを別の質問に分割することもできます。これにより、あなたを助けやすくなります。env.rb最初の質問については、バージョン管理下に置かなかったと思いますか?

Sinatra があなたの環境変数を取得していないのはなぜですか? Rakefile で Fog を構成すると、Simatra はそのファイルを認識しないためです。レーキのみで使用されます。

Fog 構成を 3 番目のファイルに入れ、requireそれを Rakefile と Sinatra アプリの両方に入れることをお勧めします。

于 2013-03-18T21:12:54.330 に答える