1

Ruby on RailsアプリケーションのHerokuデプロイメントは初めてですが、非常に奇妙な状況に陥っています。phony_railsgemを使用してアプリケーションをデプロイしようとしています。これは、開発と本番(Postgresを使用した本番)の両方でローカル(Windows)マシンに正常にデプロイされますが、Herokuにデプロイすると失敗します。具体的には、Herokuからのスタックトレースの始まりです。

2013-02-05T16:05:26+00:00 app[web.1]: /app/vendor/bundle/ruby/1.9.1/gems/phony_rails-0.1.12/lib/phony_rails.rb:74:in `block in phony_normalize': No attribute phone found on User (PhonyRails) (ArgumentError)
2013-02-05T16:05:26+00:00 app[web.1]:   from /app/vendor/bundle/ruby/1.9.1/gems/phony_rails-0.1.12/lib/phony_rails.rb:73:in `each'
2013-02-05T16:05:26+00:00 app[web.1]:   from /app/vendor/bundle/ruby/1.9.1/gems/phony_rails-0.1.12/lib/phony_rails.rb:73:in `phony_normalize'
2013-02-05T16:05:26+00:00 app[web.1]:   from /app/app/models/Users/user.rb:89:in `<class:User>'
2013-02-05T16:05:26+00:00 app[web.1]:   from /app/app/models/Users/user.rb:55:in `<top (required)>'

user.rbの89行目の問題のあるコードはこれです

phony_normalize :phone, :default_country_code => 'US'

phony_railsのソースを調べたところ、次のことがわかりました(ArgumentErrorは74行目にあります)

# Use this method on the class level like:
#   phony_normalize :phone_number, :fax_number, :default_country_code => 'NL'
#
# It checks your model object for a a country_code attribute (eg. 'NL') to do the normalizing so make sure
# you've geocoded before calling this method!
def phony_normalize(*attributes)
  options = attributes.last.is_a?(Hash) ? attributes.pop : {}
  options.assert_valid_keys :country_code, :default_country_code, :as
  if options[:as].present?
    raise ArgumentError, ':as option can not be used on phony_normalize with multiple attribute names! (PhonyRails)' if attributes.size > 1
    raise ArgumentError, "'#{options[:as]}' is not an attribute on #{self.name}. You might want to use 'phony_normalized_method :#{attributes.first}' (PhonyRails)" if not self.attribute_method?(options[:as])
  end
  attributes.each do |attribute|
    raise ArgumentError, "No attribute #{attribute} found on #{self.name} (PhonyRails)" if not self.attribute_method?(attribute)
    # Add before validation that saves a normalized version of the phone number
    self.before_validation do
      set_phony_normalized_numbers(attributes, options)
    end
  end
end

これがユーザーモデルからのattr_accesible呼び出しです

attr_accessible :email, :name, :password, :password_confirmation, :rights, :right_ids,
:address_one, :address_two, :city, :state, :zip, :phone, :institutions, :institution_ids

Herokuのユーザーモデルが:phone属性を検出していないように見えますが、attr_accessibleメソッドとデータベースの両方にあります。誰かが何が起こっているのか分かりますか?Herokuとphony_railsに関する情報がWeb上で見つかりません。

4

1 に答える 1

1

そのため、Herokuのデプロイメントを本当に理解していないように見えます。問題は、Herokuにデプロイした後にデータベースを移行していなかったことです(これは自動的に行われると思いました)。https://gist.github.com/njvitto/362873>ここですべてが機能したことを見つけた後。

于 2013-02-05T16:53:25.250 に答える