I stedet for at nedgradere MySQL perle, er det muligt at rette databasenavnsparameteren for at rette op på "dårligt håndtryk"
problem.
Jeg fandt dette:https://github.com/rubygems/rubygems/issues/423 Det fungerer godt.
I stedet for at lave et hack i real_connect
det er muligt at tilføje config/database.yml
production:
database: "itsalive_production\0"
adapter: mysql
host: localhost
encoding: UTF8
...
EDIT
Hvis du bruger løsningen med \0
i slutningen af databasenavnet. Du vil sikkert finde ud af dette og løse det selv, men jeg nævner det alligevel:
(i hvert fald i min version af Rails )
Brug af databasestrengen med \0
i slutningen giver problem, når du laver rake test
. Det starter med at slette testdatabasen, før du kopierer udviklingsdatabasens definitioner, og derefter bruge en SQL-kommandostreng, der inkluderer testdatabasenavnet. Dette vil forårsage en fejl på grund af \0
i midten af strengen.
I mit tilfælde bruger jeg en lokal udviklingsdatabase, der ikke giver noget problem, så jeg behøver ikke at have \0
i det navn.
Her er et alternativt hack til at løse det (original kode i mysql_adapter.rb
):
module ActiveRecord
module ConnectionAdapters
class MysqlAdapter
alias_method :old_execute, :execute
def execute(sql, name = nil) #:nodoc:
# This is needed because database names can end with "\0" to fix
# the issue with "handshake" when mysql server is newer than the gem
# requires. E.g. called when loading the new test db when doing "rake test".
sql = sql.delete("\0")
old_execute(sql, name)
end
end
end
end